Skip to main content

MultiQC Configuration Reference

This document describes all configuration options available in MultiQC.

Introduction

MultiQC configuration can be set in several ways:

  1. Command line parameters - Command line flags are available for many options (run multiqc --help to see all available options)
  2. Configuration files - MultiQC looks for configuration files in the following locations (in order of precedence):
    • <current working directory>/multiqc_config.yaml
    • ~/.multiqc_config.yaml
    • <installation_dir>/multiqc/utils/config_defaults.yaml
  3. Environment variables - MultiQC checks for environment variables that match configuration options prefixed with MULTIQC_, for example: MULTIQC_TITLE="My Report"

Configuration values are loaded in the following order of precedence (highest to lowest):

  1. Command line parameters
  2. Current working directory config file
  3. User home directory config file
  4. Environment variables
  5. Default configuration values

The options below can be specified in your YAML configuration files. For boolean options, use true or false (all lowercase) in your YAML files.

tip

If you'd rather build your config visually, the Config Wizard renders every option below as a form field with the same descriptions and defaults, and validates as you type.

Report Meta

Header text

title

Type: str

Title shown at the top of the report and used in the page title.

subtitle

Type: str

Subtitle shown under the report title. Plain text only.

intro_text

Type: str

Paragraph shown under the title. Useful for adding context about the analysis.

report_comment

Type: str

Free-text comment shown at the top of the report. HTML is allowed.

Example:

report_comment: This report was generated from the RNA-seq pipeline on 2024-08-21.

report_header_info

Type: List[Dict[str, str]]

Extra key/value pairs shown in the report header, eg. contact name, run ID, pipeline version. Each list item is a single-key dictionary.

Example:

report_header_info:
- Contact E-mail: phil.ewels@seqera.io
- Application Type: RNA-seq
- Project Type: Application
- Sequencing Platform: HiSeq 2500 High Output V4

Report generation info

show_analysis_paths

Type: bool (default: true)

Show the absolute paths of analysed directories in the report header.

show_analysis_time

Type: bool (default: true)

Show the date and time the report was generated in the header.

Report Appearance

Template

template

Type: str (default: "default")

Name of the report template. Built-in templates: default, original, simple, sections, gathered, geo, disco. Plugin packages can register additional templates via the multiqc.templates.v1 entry point.

Example:

template: default

template_dark_mode

Type: bool (default: true)

Enable the dark mode toggle in the report template.

simple_output

Type: bool (default: false)

Render a minimal HTML report without the toolbox or interactive widgets. Useful for very large reports.

Type: str

Path to an image to show at the top of the report, replacing the MultiQC logo.

Examples:

custom_logo: /path/to/logo.png
custom_logo: ./assets/logo.svg

custom_logo_dark

Type: str

Path to an alternative logo for dark mode. Falls back to custom_logo if unset.

Example:

custom_logo_dark: ./assets/logo_dark.svg

custom_logo_url

Type: str

URL the custom logo links to when clicked.

Example:

custom_logo_url: https://www.scilifelab.se

custom_logo_title

Type: str

Tooltip text shown when hovering over the custom logo.

Example:

custom_logo_title: Our institute name

custom_logo_width

Type: int

Logo width in pixels. Height scales proportionally.

Example:

custom_logo_width: 200

Branding

custom_favicon

Type: str

Path to a custom favicon image to show in the browser tab.

Examples:

custom_favicon: /path/to/favicon.ico
custom_favicon: ./assets/favicon.png

custom_css_files

Type: List[str]

Paths to additional CSS files to inline into the report. Useful for branding overrides.

Example:

custom_css_files:
- ./assets/custom.css
- /path/to/branding.css

Report Contents

Custom content

custom_content

Type: Dict[str, Any]

Embed arbitrary plots, tables or text in the report. See the Custom Content docs for the full structure.

Example:

custom_content:
data:
my-section-id:
data:
sample1:
col1: 100
sample2:
col1: 200
id: my-section-id
plot_type: table
section_name: My Custom Section
order:
- my-section-id
- my-other-section-id

custom_content_modules

Type: List[str]

Extra module IDs whose output should be parsed as custom content.

custom_data

Type: Dict[str, Any]

Inline custom content data keyed by section ID. Companion to custom_content for users who prefer splitting the metadata and the data across two top-level keys.

Module ordering

top_modules

Type:

List[Union[str, Dict[str, ModuleOverride]]]

Module IDs to render before module_order. Useful for pinning a module to the top regardless of where it appears in module_order. Same shape as module_order entries.

Example:

top_modules:
- fastqc
- cutadapt

module_order

Type:

List[Union[str, Dict[str, ModuleOverride]]]

Order in which modules appear in the report. Each entry is either a module ID, or a single-key dict mapping the ID to per-run overrides (eg. name, anchor, info, path_filters, path_filters_exclude, generalstats, custom_config).

Default value
- custom_content
- ccs
- ngsderive
- purple
- conpair
- isoseq
- lima
- peddy
- percolator
- haplocheck
- somalier
- methylqa
- mosdepth
- phantompeakqualtools
- qualimap
- bamdst
- preseq
- hifiasm
- quast
- qorts
- rna_seqc
- rockhopper
- rsem
- rseqc
- busco
- checkm
- bustools
- goleft_indexcov
- gffcompare
- disambiguate
- supernova
- deeptools
- sargasso
- verifybamid
- mirtrace
- happy
- mirtop
- glimpse
- gopeaks
- homer
- hops
- macs2
- theta2
- snpeff
- gatk
- htseq
- bcftools
- featurecounts
- fgbio
- dragen
- dragen_fastqc
- dedup
- pbmarkdup
- damageprofiler
- mapdamage
- biobambam2
- jcvi
- mtnucratio
- picard
- vep
- bakta
- prokka
- checkm2
- qc3C
- nanoq
- nanostat
- samblaster
- samtools
- bamtools
- sambamba
- ngsbits
- pairtools
- sexdeterrmine
- seqera_cli
- eigenstratdatabasetools
- jellyfish
- vcftools
- longranger
- stacks
- varscan2
- snippy
- umicollapse
- umitools
- truvari
- megahit
- sincei
- ganon
- gtdbtk
- bbmap
- bismark
- biscuit
- diamond
- hicexplorer
- hicup
- hicpro
- salmon
- kallisto
- slamdunk
- star
- hisat2
- tophat
- bowtie2
- bowtie1
- hostile
- cellranger
- checkatlas
- snpsplit
- odgi
- vg
- pangolin
- nextclade
- freyja
- humid
- kat
- leehom
- librarian
- nonpareil
- adapterremoval
- bbduk
- clipandmerge
- cutadapt
- trim_galore
- flexbar
- sourmash
- kaiju
- kraken
- malt
- motus
- trimmomatic
- sickle
- skewer
- sortmerna
- ribodetector
- biobloomtools
- seqfu
- fastq_screen
- fastqe
- afterqc
- fastp
- fastqc
- sequali
- filtlong
- prinseqplusplus
- pychopper
- porechop
- pycoqc
- minionqc
- anglerfish
- multivcfanalyzer
- clusterflow
- checkqc
- bcl2fastq
- bclconvert
- interop
- ivar
- flash
- seqyclean
- optitype
- whatshap
- spaceranger
- xenome
- xengsort
- metaphlan
- sylphtax
- seqwho
- telseq
- ataqv
- mgikit
- mosaicatcher

Example:

module_order:
- fastqc
- fastqc:
name: FastQC (trimmed)
path_filters:
- "*_trimmed*"
- fastqc:
generalstats: false
name: FastQC (raw)
- cutadapt

run_modules

Type: List[str]

Module IDs to run. If set, only listed modules are processed (mirror of the --module CLI flag).

Example:

run_modules:
- fastqc
- cutadapt
- samtools

exclude_modules

Type: List[str]

Module IDs to skip (mirror of the --exclude CLI flag).

Example:

exclude_modules:
- fastqc

remove_sections

Type: List[str]

Module sections to hide. Use the section anchor as it appears in the URL.

Example:

remove_sections:
- fastqc_overrepresented_sequences
- gatk-compare-overlap

report_section_order

Type:

Dict[str, Union[Literal["remove"], SectionOrderOverride]]

Reorder, group or hide report sections by ID. Values are either the literal string 'remove' (drops the section) or a dict with any combination of order (int), before (str) and after (str). See the customisation docs for the full grammar.

Example:

report_section_order:
custom_content-my-section:
before: fastqc
fastqc:
order: -10

Section comments + indicators

section_comments

Type: Dict[str, str]

Markdown text shown under specific module sections. Keys are section anchors.

Example:

section_comments:
fastqc_overrepresented_sequences: "**This is** an important note about the overrepresented\
\ sequences."
samtools: Reviewed by *Phil* on 2024-08-21.

section_status_checks

Type: Dict[str, Union[bool, Dict[str, bool]]]

Enable or disable the green/yellow/red status indicators on report sections. Top-level keys are module IDs, values are either a bool or a dict mapping section ID to bool.

Example:

section_status_checks:
fastqc: true
samtools:
alignment_stats: false

Output Options

Report file

force

Type: bool (default: false)

Overwrite existing output files without prompting.

output_fn_name

Type: str (default: "multiqc_report.html")

Filename for the generated HTML report. Defaults to multiqc_report.html.

make_report

Type: bool (default: true)

Generate the HTML report. Set to false to only produce data files.

Data files

make_data_dir

Type: bool (default: true)

Write parsed data as files alongside the report.

zip_data_dir

Type: bool (default: false)

Compress the data directory into a single .zip file.

data_dir_name

Type: str (default: "multiqc_data")

Name of the directory written alongside the report holding parsed data. Defaults to multiqc_data.

data_format

Type: Literal["tsv", "csv", "json", "yaml"] (default: "tsv")

Format used when writing parsed data files.

data_format_extensions

Type: Dict[str, str] (default: {"tsv":"txt","csv":"csv","json":"json","yaml":"yaml"})

Override the file extension used when writing each data format, eg. {tsv: txt} to write TSV as .txt.

Example:

data_format_extensions:
json: json
tsv: txt
yaml: yml

parquet_format

Type: Literal["long", "wide"] (default: "long")

Parquet table layout. 'long' has rows of (sample_name, metric_name, val_raw, val_raw_type, val_str), easy to filter by metric. 'wide' uses one column per metric (prefixed with table name and namespace), easier for analytics but can hit column limits or mixed-type issues.

Data dump

data_dump_file

Type: bool (default: true)

Write a single JSON file containing all parsed data, for re-running MultiQC later.

data_dump_file_write_raw

Type: bool (default: true)

Include raw values (before any normalisation or filtering) in the dumped JSON.

Plot export

export_plots

Type: bool (default: false)

Save each plot as a static image (formats set by export_plot_formats).

export_plot_formats

Type: List[Literal["png", "svg", "pdf"]] (default: ["png","svg","pdf"])

Image formats to export when export_plots is on.

export_plots_timeout

Type: int (default: 60)

Timeout for exporting each plot, in seconds.

plots_dir_name

Type: str (default: "multiqc_plots")

Directory for exported plot images when export_plots is on. Defaults to multiqc_plots.

PDF

make_pdf

Type: bool (default: false)

Also generate a PDF version of the report. Requires Pandoc to be installed.

pandoc_template

Type: str

Path to a Pandoc template used when exporting the report as PDF.

Sample Names

Prepend directory

prepend_dirs

Type: bool (default: false)

Prefix sample names with their parent directory. Useful when the same sample name occurs in multiple directories.

prepend_dirs_depth

Type: int (default: 0)

How many parent directories to include. 0 means all the way to the root.

prepend_dirs_sep

Type: str (default: " | ")

String inserted between directory names and the sample name. Defaults to '|'.

Examples:

prepend_dirs_sep: _
prepend_dirs_sep: " - "

Name cleaning

fn_clean_sample_names

Type: bool (default: true)

Apply the cleaning rules in fn_clean_exts and fn_clean_trim to sample names.

extra_fn_clean_exts

Type:

List[Union[str, CleanPattern]]

Extensions appended to the built-in list. Use to add custom suffixes without overriding defaults.

Example:

extra_fn_clean_exts:
- .mySuffix
- module:
- samtools
pattern: _tmp
type: remove

extra_fn_clean_trim

Type: List[str]

Strings appended to the built-in trim list, without overriding defaults.

Example:

extra_fn_clean_trim:
- sample_
- _processed

fn_clean_exts

Type:

List[Union[str, CleanPattern]]

Extensions stripped from sample names, eg. .gz, .fastq. Replaces the built-in list.

Default value
- .gz
- .fastq
- .fq
- .bam
- .cram
- .sam
- .sra
- .vcf
- .dat
- _tophat
- .pbmarkdup.log
- .log
- .stderr
- .out
- .spp
- .fa
- .fasta
- .png
- .jpg
- .jpeg
- .html
- Log.final
- ReadsPerGene
- .flagstat
- _star_aligned
- _fastqc
- .hicup
- .counts
- _counts
- .txt
- .tsv
- .csv
- .aligned
- Aligned
- .merge
- .deduplicated
- .dedup
- .clean
- .sorted
- .report
- "| stdin"
- .geneBodyCoverage
- .inner_distance_freq
- .junctionSaturation_plot.r
- .pos.DupRate.xls
- .GC.xls
- _slamdunk
- _bismark
- .conpair
- .concordance
- .contamination
- .BEST.results
- _peaks.xls
- .relatedness
- .cnt
- .aqhist
- .bhist
- .bincov
- .bqhist
- .covhist
- .covstats
- .ehist
- .gchist
- .idhist
- .ihist
- .indelhist
- .lhist
- .mhist
- .qahist
- .qchist
- .qhist
- .rpkm
- .selfSM
- .extendedFrags
- _SummaryStatistics
- .purple.purity
- .purple.qc
- .trim
- .bowtie2
- .mkD
- .highfreq
- .lowfreq
- .consensus
- .snpEff
- .snpeff
- .scaffolds
- .contigs
- .kraken2
- .ccurve
- .hisat2
- _duprate
- .markdup
- .read_distribution
- .junction_annotation
- .infer_experiment
- .biotype
- .ivar
- .mpileup
- .primer_trim
- .mapped
- .vep
- _vep
- ccs
- _NanoStats
- .cutadapt
- .qcML
- .mosdepth
- _gopeaks
- .readCounts
- .wgs_contig_mean_cov
- _overall_mean_cov
- _coverage_metrics
- .wgs_fine_hist
- .wgs_coverage_metrics
- .wgs_hist
- .vc_metrics
- .gvcf_metrics
- .ploidy_estimation_metrics
- _overall_mean_cov
- .fragment_length_hist
- .mapping_metrics
- .gc_metrics
- .trimmer_metrics
- .time_metrics
- .quant_metrics
- .quant.metrics
- .quant.transcript_coverage
- .scRNA_metrics
- .scRNA.metrics
- .scATAC_metrics
- .scATAC.metrics
- .fastqc_metrics
- .labels
- .bammetrics.metrics
- .filter_summary
- .cluster_report
- .error.spl
- .error.grp
- .vgstats
- _mapq_table
- _strand_table
- _isize_table
- _dup_report
- _cv_table
- _covdist_all
- _covdist_q40
- _CpGRetention
- _CpHRetentionByReadPos
- _totalBaseConversionRate
- _totalReadConversionRate
- .sylphmpa
- _qual
- _hifi_trimmer
- .hifi_trimmer
- _trimmer

Example:

fn_clean_exts:
- .gz
- .fastq
- .bam
- pattern: _S\d+_L\d+
type: regex

fn_clean_trim

Type: List[str]

Strings trimmed from the start or end of sample names. Replaces the built-in list.

Default value
- .
- ":"
- _
- "-"
- .r
- _val
- .idxstats
- _trimmed
- .trimmed
- .csv
- .yaml
- .yml
- .json
- _mqc
- short_summary_
- _summary
- .summary
- .align
- .h5
- _matrix
- .stats
- .hist
- .phased
- .tar
- runs_
- .qc

Example:

fn_clean_trim:
- _R1
- _R2
- _001

use_filename_as_sample_name

Type: Union[bool, List[str]] (default: false)

Use the source filename as the sample name instead of any name parsed from the log. Set to true for all modules, or to a list of module IDs / patterns to apply selectively.

Ignore samples

sample_names_ignore

Type: List[str]

Glob patterns. Matching samples are dropped from the report.

Example:

sample_names_ignore:
- "*_temp"
- control_*

sample_names_ignore_re

Type: List[str]

Regex patterns. Matching samples are dropped from the report.

Example:

sample_names_ignore_re:
- ^test_.*
- .*_neg_ctrl$

sample_names_only_include

Type: List[str]

Glob patterns. If set, only matching samples are kept.

Example:

sample_names_only_include:
- RNA_*
- Sample_??

sample_names_only_include_re

Type: List[str]

Regex patterns. If set, only matching samples are kept.

Example:

sample_names_only_include_re:
- ^WGS_[0-9]+$

Rename and replace

sample_names_rename

Type: List[List[str]]

Toolbox rename rows. Each entry is a list where the first element is the source sample name and each subsequent element is the rename for the corresponding button in sample_names_rename_buttons (so inner lists should have 1 + len(sample_names_rename_buttons) elements).

Example:

sample_names_rename:
- - SMP001
- Patient_A
- - SMP002
- Patient_B
- - SMP003
- Patient_C

sample_names_rename_buttons

Type: List[str]

Names of the toolbox buttons that switch between the rename groups defined in sample_names_rename.

Example:

sample_names_rename_buttons:
- Sample ID
- Patient ID
- Lane

sample_names_replace

Type: Dict[str, str]

Substring replacements applied to every sample name. Keys are matched, values are replacements.

Example:

sample_names_replace:
Sample_: S
_001: ""

sample_names_replace_complete

Type: bool (default: false)

Replace the entire sample name when the key matches anywhere in it.

sample_names_replace_exact

Type: bool (default: false)

Only replace when the key matches the sample name exactly, not as a substring.

sample_names_replace_regex

Type: bool (default: false)

Treat keys in sample_names_replace as regex patterns.

File Discovery

Input source

file_list

Type: bool (default: false)

Treat the input path as a file containing a list of paths to scan, one per line.

require_logs

Type: bool (default: false)

Fail with an error if any module explicitly requested with --module has no log files found. Off by default, so missing inputs are skipped silently.

Size limits

log_filesize_limit

Type: int (default: 50000000)

Skip log files larger than this many bytes.

filesearch_lines_limit

Type: int (default: 1000)

Stop reading a log file after this many lines.

Skip patterns

Type: bool (default: false)

Skip symlinked files and directories during the file search.

ignore_images

Type: bool (default: true)

Skip image files (PNG/JPEG/etc.) to avoid wasting time opening them.

fn_ignore_dirs

Type: List[str] (default: ["multiqc_data",".git","icarus_viewers","runs_per_reference","not_aligned","contigs_reports"])

Glob patterns for directory names to skip entirely during the file search.

Example:

fn_ignore_dirs:
- work
- .nextflow
- "*_logs"

fn_ignore_paths

Type: List[str] (default: ["*/work/??/??????????????????????????????","*/.snakemake","*/.singularity","*/__pycache__","*/site-packages/multiqc"])

Glob patterns for paths to skip during the file search.

Example:

fn_ignore_paths:
- "*/test_data/*"
- "*/.snakemake/*"

fn_ignore_files

Type: List[str]

Glob patterns for file names to skip during the file search.

Default value
- .DS_Store
- .py[cod]
- "*.bam"
- "*.bai"
- "*.sam"
- "*.fq.gz"
- "*.fastq.gz"
- "*.fq"
- "*.fastq"
- "*.fa"
- "*.gtf"
- "*.bed"
- "*.vcf"
- "*.tbi"
- "*.txt.gz"
- "*.pdf"
- "*.md5"
- "*.parquet"
- "*[!s][!u][!m][!_\\.m][!mva][!qer][!cpy].html"
- multiqc_data.json
- "*.gam"
- "*.gamp"
- "*.jar"

Example:

fn_ignore_files:
- "*.bai"
- "*.bak"
- "*.tmp"

filesearch_file_shared

Type: List[str]

Module IDs whose log files may be matched by multiple modules during the search.

Search patterns

sp

Type:

Dict[str, Union[SearchPattern, List[SearchPattern]]]

Override or add to the built-in module search patterns. Top-level keys are module IDs (eg. fastqc); values are a single SearchPattern dict or a list of them. See the SearchPattern definition below for the accepted fields.

Default value
multiqc_data:
fn: "*multiqc.parquet"
adapterremoval:
fn: "*.settings"
contents: AdapterRemoval
num_lines: 1
xenium/metrics:
fn: metrics_summary.csv
contents: num_cells_detected
num_lines: 5
xenium/experiment:
fn: experiment.xenium
num_lines: 50
afterqc:
fn: "*.json"
contents: allow_mismatch_in_poly
num_lines: 10000
anglerfish:
fn: "*.json"
contents: anglerfish_version
bakta:
fn: "*.txt"
contents: "Bakta:"
bamdst/coverage:
contents: "## The file was created by bamdst"
num_lines: 5
bamtools/stats:
contents: "Stats for BAM file(s):"
num_lines: 10
bases2fastq/run:
fn: RunStats.json
contents: SampleStats
num_lines: 100
bases2fastq/project:
fn: "*_RunStats.json"
contents: SampleStats
num_lines: 100
bases2fastq/manifest:
fn: RunManifest.json
contents: Settings
num_lines: 100
bbduk:
contents: Executing jgi.BBDuk
num_lines: 2
bbmap/stats:
contents:
- "#File"
- "#Total"
- "#Matched"
- "#Name\tReads\tReadsPct"
num_lines: 10
bbmap/bbsplit:
contents: "#name\t%unambiguousReads\tunambiguousMB\t%ambiguousReads"
num_lines: 5
bbmap/aqhist:
contents: "#Quality\tcount1\tfraction1\tcount2\tfraction2"
num_lines: 10
bbmap/bhist:
contents: "#Pos\tA\tC\tG\tT\tN"
num_lines: 10
bbmap/bincov:
contents: "#RefName\tCov\tPos\tRunningPos"
num_lines: 10
bbmap/bqhist:
contents: "#BaseNum\tcount_1\tmin_1\tmax_1\tmean_1\tQ1_1\tmed_1\tQ3_1\tLW_1\tRW_1\t\
count_2\tmin_2\tmax_2\tmean_2\tQ1_2\tmed_2\tQ3_2\tLW_2\tRW_2"
num_lines: 10
bbmap/covhist:
contents: "#Coverage\tnumBases"
num_lines: 10
bbmap/covstats:
contents: "#ID\tAvg_fold"
num_lines: 10
bbmap/ehist:
contents: "#Errors\tCount"
num_lines: 10
bbmap/gchist:
contents:
- "#Mean\t"
- "#GC\tCount"
num_lines: 10
bbmap/idhist:
contents:
- "#Mean_reads"
- "#Identity\tReads\tBases"
num_lines: 10
bbmap/ihist:
contents:
- "#Mean\t"
- "#InsertSize\tCount"
num_lines: 10
bbmap/indelhist:
contents: "#Length\tDeletions\tInsertions"
num_lines: 10
bbmap/lhist:
contents: "#Length\tCount"
num_lines: 10
bbmap/mhist:
contents: "#BaseNum\tMatch1\tSub1\tDel1\tIns1\tN1\tOther1\tMatch2\tSub2\tDel2\t\
Ins2\tN2\tOther2"
num_lines: 10
bbmap/qahist:
contents: "#Quality\tMatch\tSub\tIns\tDel"
num_lines: 10
bbmap/qchist:
contents_re: "#Quality\tcount1\tfraction1$"
num_lines: 10
bbmap/qhist:
contents: "#BaseNum\tRead1_linear\tRead1_log\tRead1_measured"
num_lines: 10
bbmap/rpkm:
contents:
- "#File\t"
- "#Reads\t"
- "#Mapped\t"
- "#RefSequences\t"
- "#Name Length"
num_lines: 10
bbmap/statsfile_machine:
contents: Reads Used=
num_lines: 10
bbmap/statsfile:
contents:
- "Reads Used:"
- "Mapping:"
- "Reads/sec:"
- "kBases/sec:"
num_lines: 10
bcftools/stats:
contents: This file was produced by bcftools stats
bcl2fastq:
fn: Stats.json
contents: DemuxResults
num_lines: 300
bclconvert/runinfo:
fn: RunInfo.xml
bclconvert/demux:
fn: Demultiplex_Stats.csv
bclconvert/quality_metrics:
fn: Quality_Metrics.csv
bclconvert/adaptermetrics:
fn: Adapter_Metrics.csv
bclconvert/unknown_barcodes:
fn: Top_Unknown_Barcodes.csv
biobambam2/bamsormadup:
contents: "# bamsormadup"
num_lines: 2
biobloomtools:
contents: "filter_id\thits\tmisses\tshared\trate_hit\trate_miss\trate_shared"
num_lines: 2
biscuit/align_mapq:
fn: "*_mapq_table.txt"
contents: BISCUITqc Mapping Quality Table
num_lines: 3
biscuit/align_strand:
fn: "*_strand_table.txt"
contents: BISCUITqc Strand Table
num_lines: 3
biscuit/align_isize:
fn: "*_isize_table.txt"
contents: BISCUITqc Insert Size Table
num_lines: 3
biscuit/dup_report:
fn: "*_dup_report.txt"
contents: BISCUITqc Read Duplication Table
num_lines: 3
biscuit/qc_cv:
fn: "*_cv_table.txt"
contents: BISCUITqc Uniformity Table
num_lines: 3
biscuit/covdist_all_base_botgc:
fn: "*_covdist_all_base_botgc_table.txt"
biscuit/covdist_all_base:
fn: "*_covdist_all_base_table.txt"
biscuit/covdist_all_base_topgc:
fn: "*_covdist_all_base_topgc_table.txt"
biscuit/covdist_q40_base_botgc:
fn: "*_covdist_q40_base_botgc_table.txt"
biscuit/covdist_q40_base:
fn: "*_covdist_q40_base_table.txt"
biscuit/covdist_q40_base_topgc:
fn: "*_covdist_q40_base_topgc_table.txt"
biscuit/covdist_all_cpg_botgc:
fn: "*_covdist_all_cpg_botgc_table.txt"
biscuit/covdist_all_cpg:
fn: "*_covdist_all_cpg_table.txt"
biscuit/covdist_all_cpg_topgc:
fn: "*_covdist_all_cpg_topgc_table.txt"
biscuit/covdist_q40_cpg_botgc:
fn: "*_covdist_q40_cpg_botgc_table.txt"
biscuit/covdist_q40_cpg:
fn: "*_covdist_q40_cpg_table.txt"
biscuit/covdist_q40_cpg_topgc:
fn: "*_covdist_q40_cpg_topgc_table.txt"
biscuit/cpg_retention_readpos:
fn: "*_CpGRetentionByReadPos.txt"
biscuit/cph_retention_readpos:
fn: "*_CpHRetentionByReadPos.txt"
biscuit/base_avg_retention_rate:
fn: "*_totalBaseConversionRate.txt"
biscuit/read_avg_retention_rate:
fn: "*_totalReadConversionRate.txt"
bismark/align:
fn: "*_[SP]E_report.txt"
bismark/dedup:
fn: "*.deduplication_report.txt"
bismark/meth_extract:
fn: "*_splitting_report.txt"
bismark/m_bias:
fn: "*M-bias.txt"
bismark/bam2nuc:
fn: "*.nucleotide_stats.txt"
bowtie1:
contents: "# reads processed:"
exclude_fn:
- bowtie.left_kept_reads.log
- bowtie.left_kept_reads.m2g_um.log
- bowtie.left_kept_reads.m2g_um_seg1.log
- bowtie.left_kept_reads.m2g_um_seg2.log
- bowtie.right_kept_reads.log
- bowtie.right_kept_reads.m2g_um.log
- bowtie.right_kept_reads.m2g_um_seg1.log
- bowtie.right_kept_reads.m2g_um_seg2.log
shared: true
bowtie2:
contents: "reads; of these:"
exclude_contents:
- bisulfite
- HiC-Pro
shared: true
busco:
fn: short_summary*
contents: "BUSCO version is:"
num_lines: 1
bustools:
fn: "*inspect.json"
ccs/v4:
contents: ZMWs generating CCS
num_lines: 2
max_filesize: 1024
ccs/v5:
contents: '"id": "ccs_processing"'
fn: "*.json"
checkatlas/summary:
fn: "*.tsv"
contents_re: ^AtlasFileType\tNbCells\tNbGenes
num_lines: 1
checkatlas/adata:
fn: "*.tsv"
contents_re: ^atlas_obs\tobsm\tvar\tvarm\tuns
num_lines: 1
checkatlas/qc:
fn: "*.tsv"
contents_re: cellrank_(total_counts|n_genes_by_counts|pct_counts_mt)
num_lines: 1
checkatlas/cluster:
fn: "*.tsv"
contents_re: ^Clust_Sample\tobs
num_lines: 1
checkatlas/annotation:
fn: "*.tsv"
contents_re: ^Annot_Sample\tReference\tobs
num_lines: 1
checkatlas/dimred:
fn: "*.tsv"
contents_re: ^Dimred_Sample\tobsm
num_lines: 1
cellranger/count_html:
- fn: "*.html"
contents: '"command":"Cell Ranger","subcommand":"count"'
num_lines: 20
- fn: "*.html"
contents: '"command": "Cell Ranger", "subcommand": "count"'
num_lines: 20
cellranger/vdj_html:
- fn: "*.html"
contents: '"command":"Cell Ranger","subcommand":"vdj"'
num_lines: 20
- fn: "*.html"
contents: '"command": "Cell Ranger", "subcommand": "vdj"'
num_lines: 20
cellranger_arc:
- fn: "*.html"
contents: Cell Ranger ARC
num_lines: 250
cells2stats/run:
fn: RunStats.json
contents: '"AnalysisID": "c2s.'
num_lines: 100
checkm:
- contents_re: ".*Bin Id(?:\t| {3,})Marker lineage(?:\t| {3,})# genomes(?:\t| {3,})#\
\ markers(?:\t| {3,})# marker sets.*"
num_lines: 10
checkm2:
contents: "Name\tCompleteness\tContamination\tCompleteness_Model_Used\tTranslation_Table_Used"
num_lines: 10
checkqc:
contents: instrument_and_reagent_type
fn: "*.json"
custom_content:
fn_re: .+_mqc\.(yaml|yml|json|txt|csv|tsv|log|out|png|jpg|jpeg|gif|webp|tiff|html|md)
clipandmerge:
contents: ClipAndMerge (
num_lines: 5
clusterflow/logs:
fn: "*_clusterFlow.txt"
shared: true
clusterflow/runfiles:
fn: "*.run"
contents: Cluster Flow Run File
num_lines: 2
conpair/concordance:
contents: markers (coverage per marker threshold
num_lines: 3
conpair/contamination:
contents: "Tumor sample contamination level: "
num_lines: 3
cutadapt:
- contents: This is cutadapt
exclude_contents_re: "Trim Galore version: (?:[2-9]|\\d{2,})\\."
num_lines: 100
- fn: "*.json"
contents: Cutadapt report
damageprofiler:
fn: "*dmgprof.json"
deacon:
fn: "*.json"
contents: '"version": "deacon'
num_lines: 30
dedup:
fn: "*.json"
contents: '"tool_name": "DeDup"'
num_lines: 20
deeptools/bamPEFragmentSizeTable:
contents: "\tFrag. Sampled\tFrag. Len. Min.\tFrag. Len. 1st. Qu.\tFrag. Len. Mean\t\
Frag. Len. Median\tFrag. Len. 3rd Qu."
num_lines: 1
deeptools/bamPEFragmentSizeDistribution:
contents: "#bamPEFragmentSize"
num_lines: 1
deeptools/estimateReadFiltering:
contents: "Sample\tTotal Reads\tMapped Reads\tAlignments in blacklisted regions\t\
Estimated mapped reads"
num_lines: 1
deeptools/plotCorrelationData:
contents: "#plotCorrelation --outFileCorMatrix"
num_lines: 1
deeptools/plotCoverageStdout:
contents: "sample\tmean\tstd\tmin\t25%\t50%\t75%\tmax"
num_lines: 1
deeptools/plotCoverageOutRawCounts:
contents: "#plotCoverage --outRawCounts"
num_lines: 1
deeptools/plotEnrichment:
contents: "file\tfeatureType\tpercent\tfeatureReadCount\ttotalReadCount"
num_lines: 1
deeptools/plotFingerprintOutRawCounts:
contents: "#plotFingerprint --outRawCounts"
num_lines: 1
deeptools/plotFingerprintOutQualityMetrics:
contents: "Sample\tAUC\tSynthetic AUC\tX-intercept\tSynthetic X-intercept\tElbow\
\ Point\tSynthetic Elbow Point"
num_lines: 1
deeptools/plotPCAData:
contents: "#plotPCA --outFileNameData"
num_lines: 1
deeptools/plotProfile:
contents: bin labels
num_lines: 1
diamond:
fn: diamond.log
disambiguate:
contents: unique species A pairs
num_lines: 2
dragen/vc_metrics:
fn: "*.vc_metrics.csv"
dragen/gvcf_metrics:
fn: "*.gvcf_metrics.csv"
dragen/ploidy_estimation_metrics:
fn: "*.ploidy_estimation_metrics.csv"
dragen/wgs_contig_mean_cov:
fn_re: .*\.wgs_contig_mean_cov_?(tumor|normal)?\.csv
dragen/overall_mean_cov_metrics:
fn_re: .*_overall_mean_cov.*\.csv
dragen/coverage_metrics:
fn_re: .*_coverage_metrics.*\.csv
dragen/wgs_fine_hist:
fn_re: .*\.wgs_fine_hist_?(tumor|normal)?\.csv
dragen/fragment_length_hist:
fn: "*.fragment_length_hist.csv"
dragen/mapping_metrics:
fn: "*.mapping_metrics.csv"
contents: Number of unique reads (excl. duplicate marked reads)
num_lines: 50
dragen/gc_metrics:
fn: "*.gc_metrics.csv"
dragen/trimmer_metrics:
fn: "*.trimmer_metrics.csv"
dragen/time_metrics:
fn: "*.time_metrics.csv"
dragen/rna_quant_metrics:
fn: "*.quant[._]metrics.csv"
dragen/rna_transcript_cov:
fn: "*.quant.transcript_coverage.txt"
dragen/sc_rna_metrics:
fn: "*.scRNA[._]metrics.csv"
dragen/sc_atac_metrics:
fn: "*.scATAC[._]metrics.csv"
dragen_fastqc:
fn: "*.fastqc_metrics.csv"
eigenstratdatabasetools:
fn: "*_eigenstrat_coverage.json"
fastp:
fn: "*.json"
contents: '"before_filtering": {'
num_lines: 50
fastq_screen:
fn: "*_screen.txt"
fastqe:
fn: "*fastqe*"
contents: "Filename\tStatistic\tQualities"
num_lines: 1
fastqc/data:
fn: "*fastqc_data.txt"
fastqc/zip:
fn: "*_fastqc.zip"
fastqc/theoretical_gc:
fn: "*fastqc_theoretical_gc*"
featurecounts:
fn: "*.summary"
shared: true
fgbio/groupreadsbyumi:
contents: fraction_gt_or_eq_family_size
num_lines: 3
fgbio/errorratebyreadposition:
contents: "read_number\tposition\tbases_total\terrors\terror_rate\ta_to_c_error_rate\t\
a_to_g_error_rate\ta_to_t_error_rate\tc_to_a_error_rate\tc_to_g_error_rate\tc_to_t_error_rate"
num_lines: 3
filtlong:
contents: Scoring long reads
contents_re: .*Filtering long reads.*
num_lines: 5
flash/log:
contents: "[FLASH]"
flash/hist:
fn: "*flash*.hist"
flexbar:
contents: Flexbar - flexible barcode and adapter removal
freyja:
fn: "*.tsv"
contents: "summarized\t["
num_lines: 6
ganon:
contents:
- ganon-classify processed
num_lines: 100
gatk/varianteval:
contents: "#:GATKTable:TiTvVariantEvaluator"
gatk/base_recalibrator:
- contents: "#:GATKTable:Arguments:Recalibration"
num_lines: 3
- contents: "#:SENTIEON_QCAL_TABLE:Arguments:Recalibration"
num_lines: 3
gatk/analyze_saturation_mutagenesis:
fn: "*.readCounts"
contents: ">>Reads in disjoint pairs evaluated separately:"
num_lines: 10
gffcompare:
fn: "*.stats"
contents: "# gffcompare"
num_lines: 2
glimpse/err_spl:
fn: "*.error.spl.txt.gz"
num_lines: 1
glimpse/err_grp:
fn: "*.error.grp.txt.gz"
num_lines: 1
goleft_indexcov/roc:
fn: "*-indexcov.roc"
goleft_indexcov/ped:
fn: "*-indexcov.ped"
gopeaks:
fn: "*_gopeaks.json"
gtdbtk:
contents: "user_genome\tclassification\tclosest_genome_reference\tclosest_genome_reference_radius\t\
closest_genome_taxonomy\tclosest_genome_ani"
num_lines: 10
haplocheck:
contents: "\"Sample\"\t\"Contamination Status\"\t\"Contamination Level\"\t\"Distance\"\
\t\"Sample Coverage\""
num_lines: 10
happy:
fn: "*.summary.csv"
contents: Type,Filter,TRUTH
htseq:
- contents_re: ^feature\tcount$
num_lines: 1
shared: true
- contents_re: ^\w+.*\t\d+$
num_lines: 1
shared: true
hicexplorer:
contents: Min rest. site distance
max_filesize: 4096
num_lines: 26
hicup:
fn: HiCUP_summary_report*
hicup/html:
fn: "*HiCUP_summary_report*.html"
hicpro/mmapstat:
fn: "*mapstat"
contents: total_R
num_lines: 10
hicpro/mpairstat:
fn: "*pairstat"
contents: Total_pairs_processed
num_lines: 10
hicpro/mergestat:
fn: "*.mergestat"
contents: valid_interaction
num_lines: 10
hicpro/mRSstat:
fn: "*RSstat"
contents: Valid_interaction_pairs
hicpro/assplit:
fn: "*assplit.stat"
hicstuff/pipeline_stats:
- fn: "*.txt"
contents: "## hicstuff:"
num_lines: 100
- fn: "*.log"
contents: "## hicstuff:"
num_lines: 10
hicstuff/distancelaw:
contents: "## distance_law"
num_lines: 5
hifiasm:
contents: "[M::ha_analyze_count]"
num_lines: 1
hifi_trimmer:
fn: "*.json"
contents: '"total_reads_trimmed"'
num_lines: 10
hisat2:
contents: "HISAT2 summary stats:"
homer/findpeaks:
contents: "# HOMER Peaks"
num_lines: 3
homer/GCcontent:
fn: tagGCcontent.txt
homer/genomeGCcontent:
fn: genomeGCcontent.txt
homer/RestrictionDistribution:
fn: petagRestrictionDistribution.*.txt
homer/LengthDistribution:
fn: tagLengthDistribution.txt
homer/tagInfo:
fn: tagInfo.txt
homer/FreqDistribution:
fn: petag.FreqDistribution_1000.txt
hops:
fn: heatmap_overview_Wevid.json
hostile:
fn: "*.json"
contents: '"reads_removed_proportion"'
num_lines: 100
humid/stats:
fn: stats.dat
contents: "total: "
num_lines: 1
humid/neighbours:
fn: neigh.dat
contents_re: "[0-9]+ [0-9]+"
num_lines: 1
humid/counts:
fn: counts.dat
contents_re: "[0-9]+ [0-9]+"
num_lines: 1
humid/clusters:
fn: clusters.dat
contents_re: "[0-9]+ [0-9]+"
num_lines: 1
interop/summary:
contents: Level,Yield,Projected Yield,Aligned,Error Rate,Intensity C1,%>=Q30
interop/index-summary:
contents: Total Reads,PF Reads,% Read Identified (PF),CV,Min,Max
isoseq/refine-json:
contents: '"num_reads_fl"'
fn: "*.json"
isoseq/refine-csv:
contents: id,strand,fivelen,threelen,polyAlen,insertlen,primer
fn: "*.csv"
isoseq/cluster-csv:
contents: cluster_id
fn: "*cluster_report.csv"
num_lines: 1
ivar/trim:
contents: Number of references
num_lines: 8
jcvi:
contents: " o % GC % of genome Average size (bp) Median size (bp)\
\ Number Total length (Mb)"
jellyfish:
fn: "*_jf.hist"
kaiju:
contents_re: file\tpercent\treads\ttaxon_id\ttaxon_name
num_lines: 1
kallisto:
contents: "[quant] finding pseudoalignments for the reads"
kat:
fn: "*.dist_analysis.json"
kraken:
contents_re: ^\s{0,2}(\d{1,3}\.\d{1,2})\t(\d+)\t(\d+)\t((\d+)\t(\d+)\t)?([URDKPCOFGS-]\d{0,2})\t(\d+)(\s+)[root|unclassified]
num_lines: 2
librarian:
fn: librarian_heatmap.txt
leehom:
contents: Adapter dimers/chimeras
num_lines: 100
lima/summary:
contents: ZMWs above all thresholds
num_lines: 2
max_filesize: 1024
lima/counts:
contents: "IdxFirst\tIdxCombined\tIdxFirstNamed\tIdxCombinedNamed\tCounts\tMeanScore"
num_lines: 1
longranger/summary:
fn: "*summary.csv"
contents: longranger_version,instrument_ids,gems_detected,mean_dna_per_gem,bc_on_whitelist,bc_mean_qscore,n50_linked_reads_per_molecule
num_lines: 2
longranger/invocation:
fn: _invocation
contents: call PHASER_SVCALLER_CS(
max_filesize: 2048
macs2:
fn: "*_peaks.xls"
malt:
contents: MaltRun - Aligns sequences using MALT (MEGAN alignment tool)
num_lines: 2
mapdamage:
- fn: 3p*_freq.txt
- fn: 5p*_freq.txt
- fn: lgdistribution.txt
megahit:
contents: " - MEGAHIT v"
num_lines: 5
metaphlan:
fn: "*.txt"
contents: "#clade_name\tNCBI_tax_id\trelative_abundance\t"
methurator:
fn: "*methurator_summary.yml"
methylqa:
fn: "*.report"
shared: true
mgikit/mgi_ambiguous_barcode:
fn: "*.mgikit.ambiguous_barcode"
mgikit/mgi_sample_stats:
fn: "*.mgikit.sample_stats"
mgikit/mgi_general_info:
fn: "*.mgikit.general"
mgikit/mgi_sample_reads:
fn: "*.mgikit.info"
mgikit/mgi_undetermined_barcode:
fn: "*.mgikit.undetermined_barcode"
minionqc:
fn: summary.yaml
contents: total.gigabases
mirtop:
fn: "*_mirtop_stats.log"
mirtrace/summary:
fn: mirtrace-results.json
mirtrace/length:
fn: mirtrace-stats-length.tsv
mirtrace/contaminationbasic:
fn: mirtrace-stats-contamination_basic.tsv
mirtrace/mirnacomplexity:
fn: mirtrace-stats-mirna-complexity.tsv
mtnucratio:
fn: "*mtnuc.json"
mosdepth/summary:
fn: "*.mosdepth.summary.txt"
mosdepth/global_dist:
fn: "*.mosdepth.global.dist.txt"
mosdepth/region_dist:
fn: "*.mosdepth.region.dist.txt"
motus:
contents: Reads are aligned (by BWA) to marker gene sequences in the reference database
num_lines: 2
multivcfanalyzer:
fn: MultiVCFAnalyzer.json
nanostat:
max_filesize: 4096
contents_re: Metrics\s+dataset\s*
num_lines: 1
nanostat/legacy:
max_filesize: 4096
contents_re: General summary:\s*
num_lines: 1
nanoq:
contents: Nanoq Read Summary
num_lines: 3
nextclade:
contents: seqName;clade;
num_lines: 1
ngsbits/readqc:
- fn: "*.qcML"
contents: ReadQC
num_lines: 20
- fn: "*.qcML"
contents: SeqPurge
num_lines: 20
ngsbits/mappingqc:
- fn: "*.qcML"
contents: MappingQC
num_lines: 20
ngsbits/samplegender:
- fn: "*_ngsbits_sex.tsv"
ngsderive/strandedness:
contents: "File\tTotalReads\tForwardPct\tReversePct\tPredicted"
num_lines: 1
ngsderive/instrument:
contents: "File\tInstrument\tConfidence\tBasis"
num_lines: 1
ngsderive/readlen:
contents: "File\tEvidence\tMajorityPctDetected\tConsensusReadLength"
num_lines: 1
ngsderive/encoding:
contents: "File\tEvidence\tProbableEncoding"
num_lines: 1
ngsderive/junction_annotation:
contents: "File\ttotal_junctions\ttotal_splice_events\tknown_junctions\tpartial_novel_junctions\t\
complete_novel_junctions\tknown_spliced_reads\tpartial_novel_spliced_reads\tcomplete_novel_spliced_reads"
num_lines: 1
nonpareil:
- fn: "*.json"
contents: LRstar
num_lines: 50
max_filesize: 1048576
optitype:
contents: "\tA1\tA2\tB1\tB2\tC1\tC2\tReads\tObjective"
num_lines: 1
pangolin:
contents: pangolin_version
num_lines: 1
odgi:
- fn: "*.og.stats.yaml"
- fn: "*.og.stats.yml"
- fn: "*.odgi.stats.yaml"
- fn: "*.odgi.stats.yml"
pairtools:
contents:
- "total_single_sided_mapped\t"
- "cis\t"
- "trans\t"
- pair_types/
num_lines: 20
peddy/summary_table:
fn: "*.peddy.ped"
peddy/het_check:
fn: "*.het_check.csv"
peddy/ped_check:
fn: "*.ped_check.csv"
peddy/sex_check:
fn: "*.sex_check.csv"
peddy/background_pca:
fn: "*.background_pca.json"
percolator:
fn: "*percolator_feature_weights.tsv"
seqera_cli/run_dump:
fn: runs_*.tar.gz
seqera_cli/json:
fn: workflow.json
sequali:
fn: "*.json"
contents: '"sequali_version"'
num_lines: 10
somalier/somalier-ancestry:
fn: "*.somalier-ancestry.tsv"
somalier/samples:
fn: "*.samples.tsv"
contents: "#family_id"
num_lines: 5
somalier/pairs:
fn: "*.pairs.tsv"
contents: hom_concordance
num_lines: 5
sourmash/compare:
fn: "*.labels.txt"
sourmash/gather:
contents: intersect_bp,f_orig_query,f_match,f_unique_to_query,f_unique_weighted,
num_lines: 1
pbmarkdup:
contents_re: LIBRARY +READS +UNIQUE MOLECULES +DUPLICATE READS
num_lines: 5
phantompeakqualtools/out:
fn: "*.spp.out"
picard/alignment_metrics:
- contents: picard.analysis.AlignmentSummaryMetrics
- contents: --algo AlignmentStat
picard/basedistributionbycycle:
contents: BaseDistributionByCycleMetrics
picard/crosscheckfingerprints:
contents: CrosscheckFingerprints
picard/gcbias:
- contents: GcBiasDetailMetrics
- contents: GcBiasSummaryMetrics
- contents: --algo GCBias
picard/hsmetrics:
- contents: HsMetrics
- contents: --algo HsMetricAlgo
picard/insertsize:
- contents: picard.analysis.InsertSizeMetrics
- contents: --algo InsertSizeMetricAlgo
picard/markdups:
- contents: picard.sam.MarkDuplicates
- contents: picard.sam.DuplicationMetrics
- contents: picard.sam.markduplicates.MarkDuplicates
- contents: markduplicates.DuplicationMetrics
- contents: MarkDuplicatesSpark
- contents: markduplicates.GATKDuplicationMetrics
- contents: --algo Dedup
picard/oxogmetrics:
- contents: "# picard.analysis.CollectOxoGMetrics"
- contents: "# CollectOxoGMetrics"
- contents_re: "# CollectMultipleMetrics .*OxoGMetrics"
shared: true
picard/pcr_metrics:
- contents: "# picard.analysis.directed.CollectTargetedPcrMetrics"
- contents_re: "# CollectMultipleMetrics .*TargetedPcrMetrics"
shared: true
picard/quality_by_cycle:
- contents: "# MeanQualityByCycle"
- contents: --algo MeanQualityByCycle
- contents_re: .*CollectMultipleMetrics.*MeanQualityByCycle
shared: true
picard/quality_score_distribution:
- contents: "# QualityScoreDistribution"
- contents: --algo QualDistribution
- contents_re: .*CollectMultipleMetrics.*QualityScoreDistribution
shared: true
picard/quality_yield_metrics:
- contents: "# CollectQualityYieldMetrics"
- contents_re: .*CollectMultipleMetrics.*QualityYieldMetrics
shared: true
picard/rnaseqmetrics:
- contents: "# picard.analysis.Collectrnaseqmetrics"
- contents: "# picard.analysis.CollectRnaSeqMetrics"
- contents: "# CollectRnaSeqMetrics"
- contents_re: "# CollectMultipleMetrics .*RnaSeqMetrics"
shared: true
picard/rrbs_metrics:
- contents: "# picard.analysis.CollectRrbsMetrics"
- contents_re: "# CollectMultipleMetrics .*RrbsMetrics"
shared: true
picard/sam_file_validation:
fn: "*[Vv]alidate[Ss]am[Ff]ile*"
picard/variant_calling_metrics:
contents_re: "## METRICS CLASS.*VariantCallingDetailMetrics"
picard/wgs_metrics:
- contents: --algo WgsMetricsAlgo
- contents_re: "## METRICS CLASS.*WgsMetrics"
shared: true
picard/collectilluminabasecallingmetrics:
contents: CollectIlluminaBasecallingMetrics
picard/collectilluminalanemetrics:
contents: CollectIlluminaLaneMetrics
picard/extractilluminabarcodes:
contents: ExtractIlluminaBarcodes
picard/markilluminaadapters:
contents: MarkIlluminaAdapters
porechop:
contents: Looking for known adapter sets
num_lines: 10
preseq:
- contents: EXPECTED_DISTINCT
num_lines: 2
- contents: distinct_reads
num_lines: 2
preseq/real_counts:
fn: "*preseq_real_counts*"
prinseqplusplus:
- contents: reads removed by -
num_lines: 2
prokka:
contents: "contigs:"
num_lines: 2
purple/qc:
fn: "*.purple.qc"
purple/purity:
fn: "*.purple.purity.tsv"
pycoqc:
contents: '"pycoqc":'
num_lines: 2
pychopper:
contents: "Classification\tRescue"
num_lines: 6
qc3C:
fn: "*.qc3C.json"
qorts:
contents: BENCHMARK_MinutesOnSamIteration
num_lines: 100
qorts/log:
fn: QC.*.log
contents: Starting QoRTs
num_lines: 2
qualimap/bamqc/genome_results:
fn: genome_results.txt
qualimap/bamqc/coverage:
fn: coverage_histogram.txt
qualimap/bamqc/insert_size:
fn: insert_size_histogram.txt
qualimap/bamqc/genome_fraction:
fn: genome_fraction_coverage.txt
qualimap/bamqc/gc_dist:
fn: mapped_reads_gc-content_distribution.txt
qualimap/bamqc/html:
fn: qualimapReport.html
contents: "Qualimap report: BAM QC"
num_lines: 10
qualimap/rnaseq/rnaseq_results:
fn: rnaseq_qc_results.txt
qualimap/rnaseq/coverage:
fn: coverage_profile_along_genes_(total).txt
qualimap/rnaseq/html:
fn: qualimapReport.html
contents: "Qualimap report: RNA Seq QC"
num_lines: 10
quast:
fn: report.tsv
contents: "Assembly\t"
num_lines: 2
rna_seqc/metrics_v1:
fn: "*metrics.tsv"
contents: "Sample\tNote\t"
rna_seqc/metrics_v2:
fn: "*metrics.tsv"
contents: High Quality Ambiguous Alignment Rate
rna_seqc/coverage:
fn_re: meanCoverageNorm_(high|medium|low)\.txt
rna_seqc/correlation:
fn_re: corrMatrix(Pearson|Spearman)\.txt
rna_seqc/html:
fn: index.html
contents: RNA-SeQC</a> v
num_lines: 200
ribotish/qual:
fn: "*_qual.txt"
num_lines: 10
ribowaltz/psite_region:
fn: "*ribowaltz*psite_region.tsv"
contents_re: "sample[,\t]region[,\t]count[,\t]scaled_count"
num_lines: 1
ribowaltz/frames:
fn: "*ribowaltz*frames.tsv"
contents_re: "sample[,\t]region[,\t]frame[,\t]count[,\t]scaled_count"
num_lines: 1
ribowaltz/metaprofile:
fn: "*ribowaltz*metaprofile_psite.tsv"
contents_re: "sample[,\t]region[,\t]x[,\t]y"
num_lines: 1
riker/alignment:
fn: "*.alignment-metrics.txt"
contents_re: ^sample\b.*\bcategory\b
num_lines: 1
riker/basic_base_dist:
fn: "*.base-distribution-by-cycle.txt"
contents_re: ^sample\b.*\bfrac_a\b
num_lines: 1
riker/basic_mean_quality:
fn: "*.mean-quality-by-cycle.txt"
contents_re: ^sample\b.*\bmean_quality\b
num_lines: 1
riker/basic_quality_dist:
fn: "*.quality-score-distribution.txt"
contents_re: ^sample\b.*\bfrac_bases\b
num_lines: 1
riker/gcbias_detail:
fn: "*.gcbias-detail.txt"
contents_re: ^sample\b.*\bnormalized_coverage\b
num_lines: 1
riker/gcbias_summary:
fn: "*.gcbias-summary.txt"
contents_re: ^sample\b.*\bgc_0_19_normcov\b
num_lines: 1
riker/hybcap_metrics:
fn: "*.hybcap-metrics.txt"
contents_re: ^sample\b.*\bbait_territory\b
num_lines: 1
riker/isize_metrics:
fn: "*.isize-metrics.txt"
contents_re: ^sample\b.*\bpair_orientation\b
num_lines: 1
riker/isize_histogram:
fn: "*.isize-histogram.txt"
contents_re: ^sample\b.*\bfr_count\b
num_lines: 1
riker/wgs_metrics:
fn: "*.wgs-metrics.txt"
contents_re: ^sample\b.*\bgenome_territory\b
num_lines: 1
riker/wgs_coverage:
fn: "*.wgs-coverage.txt"
contents_re: ^sample\b.*\bbases_at_or_above\b
num_lines: 1
rockhopper:
fn: summary.txt
contents: Number of gene-pairs predicted to be part of the same operon
max_filesize: 500000
ribodetector:
contents: Writing output non-rRNA sequences into file
num_lines: 20
rsem:
fn: "*.cnt"
rseqc/bam_stat:
contents: "Proper-paired reads map to different chrom:"
max_filesize: 500000
rseqc/gene_body_coverage:
fn: "*.geneBodyCoverage.txt"
rseqc/inner_distance:
fn: "*.inner_distance_freq.txt"
rseqc/junction_annotation:
contents: "Partial Novel Splicing Junctions:"
max_filesize: 500000
rseqc/junction_saturation:
fn: "*.junctionSaturation_plot.r"
rseqc/read_gc:
fn: "*.GC.xls"
rseqc/read_distribution:
contents: Group Total_bases Tag_count Tags/Kb
max_filesize: 500000
rseqc/read_duplication_pos:
fn: "*.pos.DupRate.xls"
rseqc/infer_experiment:
- fn: "*infer_experiment.txt"
- contents: Fraction of reads explained by
max_filesize: 500000
rseqc/tin:
fn: "*.summary.txt"
contents: TIN(median)
num_lines: 1
salmon/meta:
fn: meta_info.json
contents: salmon_version
num_lines: 10
max_filesize: 50000
salmon/lfc:
fn: lib_format_counts.json
salmon/fld:
fn: flenDist.txt
sambamba/markdup:
contents: finding positions of the duplicate reads in the file
num_lines: 50
samblaster:
contents: "samblaster: Version"
samtools/stats:
contents: This file was produced by samtools stats
samtools/flagstat:
contents: in total (QC-passed reads + QC-failed reads)
samtools/idxstats:
fn: "*idxstat*"
samtools/rmdup:
contents: "[bam_rmdup"
samtools/ampliconclip:
contents:
- "COMMAND:"
- samtools ampliconclip
num_lines: 11
samtools/coverage:
contents: "#rname\tstartpos\tendpos\tnumreads\tcovbases\tcoverage\tmeandepth\tmeanbaseq\t\
meanmapq"
num_lines: 10
samtools/markdup_txt:
contents:
- "^COMMAND:"
- samtools markdup
num_lines: 2
samtools/markdup_json:
contents:
- '"COMMAND":'
- samtools markdup
num_lines: 10
sargasso:
fn: overall_filtering_summary.txt
seqfu/stats:
contents: "File\t#Seq\tTotal bp\tAvg\tN50\tN75\tN90\tauN\tMin\tMax"
num_lines: 1
seqkit/stats:
contents_re: ^file\s+format\s+type\s+num_seqs\s+sum_len
num_lines: 1
seqwho:
contents: ' "Per Base Seq": ['
num_lines: 10
seqyclean:
fn: "*_SummaryStatistics.tsv"
sexdeterrmine:
fn: sexdeterrmine.json
sickle:
contents_re: "FastQ \\w*\\s?records kept: .*"
num_lines: 2
sincei/scFilterStats:
contents: "Cell_ID\tTotal_sampled\tFiltered\tBlacklisted\tLow_MAPQ\tMissing_Flags\t\
Excluded_Flags"
num_lines: 1
sincei/scCountQC:
fn: "*.cells.tsv"
contents: "Cell_ID\tbarcodes\tsample\tn_genes_by_counts\tlog1p_n_genes_by_counts\t\
total_counts"
skewer:
contents: "maximum error ratio allowed (-r):"
slamdunk/summary:
contents: "# slamdunk summary"
num_lines: 1
slamdunk/PCA:
contents: "# slamdunk PCA"
num_lines: 1
slamdunk/rates:
contents: "# slamdunk rates"
num_lines: 1
slamdunk/utrrates:
contents: "# slamdunk utrrates"
num_lines: 1
slamdunk/tcperreadpos:
contents: "# slamdunk tcperreadpos"
num_lines: 1
slamdunk/tcperutrpos:
contents: "# slamdunk tcperutr"
num_lines: 1
snippy/snippy:
contents: snippy
num_lines: 20
snippy/snippy-core:
contents_re: ID\tLENGTH\tALIGNED\tUNALIGNED\tVARIANT\tHET\tMASKED\tLOWCOV
num_lines: 1
snpeff:
contents: SnpEff_version
max_filesize: 5000000
snpsplit/old:
contents: "Writing allele-flagged output file to:"
num_lines: 2
snpsplit/new:
fn: "*SNPsplit_report.yaml"
software_versions:
fn_re: .+_mqc_versions\.(yaml|yml)
sompy:
fn: "*.stats.csv"
contents: ",sompyversion,sompycmd"
num_lines: 2
sortmerna:
contents: Minimal SW score based on E-value
spaceranger/count_html:
- fn: "*.html"
contents: '"command":"Space Ranger","subcommand":"count"'
num_lines: 20
- fn: "*.html"
contents: '"command": "Space Ranger", "subcommand": "count"'
num_lines: 20
stacks/gstacks:
fn: gstacks.log.distribs
contents: BEGIN effective_coverages_per_sample
stacks/populations:
fn: populations.log.distribs
contents: BEGIN missing_samples_per_loc_prefilters
stacks/sumstats:
fn: "*.sumstats_summary.tsv"
contents: "# Pop ID\tPrivate\tNum_Indv\tVar\tStdErr\tP\tVar"
max_filesize: 1000000
star:
fn: "*Log.final.out"
star/genecounts:
fn: "*ReadsPerGene.out.tab"
supernova/report:
fn: "*report*.txt"
num_lines: 100
contents: "- assembly checksum ="
supernova/summary:
fn: summary.json
num_lines: 120
contents: '"lw_mean_mol_len":'
supernova/molecules:
fn: histogram_molecules.json
num_lines: 10
contents: '"description": "molecules",'
supernova/kmers:
fn: histogram_kmer_count.json
num_lines: 10
contents: '"description": "kmer_count",'
sylphtax:
fn: "*.sylphmpa"
telseq:
num_lines: 3
contents: "ReadGroup\tLibrary\tSample\tTotal\tMapped\tDuplicates\tLENGTH_ESTIMATE"
theta2:
fn: "*.BEST.results"
tophat:
fn: "*align_summary.txt"
shared: true
trim_galore:
fn: "*_trimming_report.json"
trimmomatic:
contents_re: ^Trimmomatic
truvari/bench:
contents_re: .*truvari.* bench.*
fn: log.txt
num_lines: 10
umicollapse:
num_lines: 100
contents: "UMI collapsing finished in "
umitools/extract:
contents: "# output generated by extract"
num_lines: 100
umitools/dedup:
contents: "# output generated by dedup"
num_lines: 100
varscan2/mpileup2snp:
contents: Only SNPs will be reported
num_lines: 10
varscan2/mpileup2indel:
contents: Only indels will be reported
num_lines: 10
varscan2/mpileup2cns:
contents: Only variants will be reported
num_lines: 10
vcftools/relatedness2:
fn: "*.relatedness2"
vcftools/tstv_by_count:
fn: "*.TsTv.count"
vcftools/tstv_by_qual:
fn: "*.TsTv.qual"
vcftools/tstv_summary:
fn: "*.TsTv.summary"
vep/vep_html:
fn: "*.html"
contents: VEP summary
num_lines: 10
max_filesize: 1000000
vep/vep_txt:
contents: "[VEP run statistics]"
num_lines: 1
max_filesize: 100000
verifybamid/selfsm:
fn: "*.selfSM"
vg/stats:
contents:
- "Total perfect:"
- "Total gapless (softclips allowed):"
- "Total time:"
- "Speed:"
num_lines: 30
whatshap/stats:
contents: "#sample\tchromosome\tfile_name\tvariants\tphased\tunphased\tsingletons"
num_lines: 1
xenome:
contents: "B\tG\tH\tM\tcount\tpercent\tclass"
num_lines: 2
xengsort:
contents: "# Xengsort classify"
num_lines: 2
ataqv:
fn: "*.json"
contents: ataqv_version
num_lines: 10
mosaicatcher:
fn: "*.mosaicatcher_info_raw.txt"

Example:

sp:
fastqc/data:
fn: fastqc_data.txt
fastqc/zip:
fn: "*_fastqc.zip"

Plot Settings

Rendering mode

plots_force_flat

Type: bool (default: false)

Render plots as static images instead of interactive Plotly. Useful for very large reports.

plots_force_interactive

Type: bool (default: false)

Force interactive plots even when MultiQC would normally fall back to flat images.

plots_flat_numseries

Type: int (default: 2000)

If a plot has more than this many series, MultiQC switches it from interactive to flat image.

plots_defer_loading_numseries

Type: int (default: 100)

Plots with more than this many series start collapsed. The user clicks a button to render them.

num_datasets_plot_limit

Type: int (default: 100)

Deprecated. Use plots_defer_loading_numseries instead.

Appearance

plots_export_font_scale

Type: float (default: 1.0)

Multiplier applied to font sizes in exported plot images. Bump up for publication-quality output.

plot_font_family

Type: str

CSS font-family for plot text. Defaults to a system font stack.

custom_plot_config

Type: Dict[str, Any]

Override plot config options per plot. Top-level keys are plot IDs, values are option dicts.

Example:

custom_plot_config:
fastqc_per_base_sequence_quality_plot:
title: "FastQC: Mean Quality Scores (custom)"
yaxis:
title: Phred score

lineplot_number_of_points_to_hide_markers

Type: int (default: 50)

Hide individual data point markers in line plots once the total point count across samples exceeds this.

barplot_legend_on_bottom

Type: bool (default: false)

Place bar plot legends below the plot instead of to the side. Not recommended.

Boxplot and violin

boxplot_boxpoints

Type: Literal["outliers", "suspectedoutliers", "all", False] (default: "outliers")

How boxplot data points are drawn. Use false to hide individual points.

box_min_threshold_outliers

Type: int (default: 100)

When a boxplot has more samples than this, only outlier points are drawn.

box_min_threshold_no_points

Type: int (default: 1000)

When a boxplot has more samples than this, no individual points are drawn.

violin_downsample_after

Type: int (default: 2000)

Start downsampling violin plot data once the sample count exceeds this. Keeps rendering snappy.

violin_min_threshold_outliers

Type: int (default: 100)

When a violin plot has more samples than this, only outlier points are drawn.

violin_min_threshold_no_points

Type: int (default: 1000)

When a violin plot has more samples than this, no individual points are drawn.

Toolbox

Highlighting

highlight_patterns

Type: List[str]

Substring (or regex) patterns. Matching samples are highlighted in plots and tables.

Example:

highlight_patterns:
- control
- treated

highlight_colors

Type: List[str]

CSS colour for each entry in highlight_patterns, in the same order. Accepts hex (#377eb8), named colours (red), or any CSS colour function (rgb(...), hsl(...)).

Example:

highlight_colors:
- "#377eb8"
- "#e41a1c"

highlight_regex

Type: bool (default: false)

Treat highlight_patterns as regex instead of plain substring.

Show/hide buttons

show_hide_buttons

Type: List[str]

Labels for the toolbox show/hide buttons. One per pattern set.

Example:

show_hide_buttons:
- Tumour samples
- Normal samples

show_hide_patterns

Type: List[Union[str, List[str]]]

Patterns for each show/hide button. Each entry is a string or list of strings to match against sample names.

Example:

show_hide_patterns:
- - _T_
- _tumour_
- - _N_
- _normal_

show_hide_mode

Type: List[Literal["show", "hide", "show_re", "hide_re"]]

Action for each show/hide button: 'show' (only show matches), 'hide' (hide matches), or their _re variants which signal regex patterns (set by the TSV loader).

Example:

show_hide_mode:
- show
- show

show_hide_regex

Type: List[Union[str, bool]]

Whether each pattern set is treated as regex. List of bools aligned with show_hide_buttons.

Example:

show_hide_regex:
- false
- false

Table Settings

General

collapse_tables

Type: bool (default: true)

Collapse module tables by default. Users click to expand.

max_table_rows

Type: int (default: 500)

Tables larger than this many rows are rendered as a violin plot instead.

max_configurable_table_columns

Type: int (default: 200)

Cap on the number of columns the user can toggle in the table-configure toolbox.

decimalPoint_format

Type: str (default: ".")

Decimal-point character used in formatted numbers. Defaults to .

Example:

decimalPoint_format: ","

thousandsSep_format

Type: str (default: " ")

Thousands separator used in formatted numbers. Defaults to a single space, which is rendered as a small non-breaking space.

Example:

thousandsSep_format: ","

General Stats table

general_stats_columns

Type:

Dict[str, GeneralStatsModuleConfig]

Per-module overrides for General Stats columns. Top-level keys are module IDs.

Example:

general_stats_columns:
fastqc:
columns:
percent_duplicates:
format: "{:,.1f}%"
max: 100
min: 0
scale: RdYlGn-rev
title: "% Dups"

general_stats_helptext

Type: str

Help text shown under the General Statistics heading at the top of the report.

skip_generalstats

Type: bool (default: false)

Hide the General Statistics table at the top of the report.

Column overrides

table_columns_name

Type: Dict[str, Union[str, Dict[str, str]]]

Rename table columns. Top-level keys are module IDs, inner keys are column IDs, values are the new display name.

Example:

table_columns_name:
fastqc:
percent_duplicates: "% Dups"
percent_gc: "% GC"

table_columns_placement

Type: Dict[str, Dict[str, float]]

Reorder table columns. Top-level keys are module IDs, inner keys are column IDs, values are float sort weights (lower is further left).

Example:

table_columns_placement:
fastqc:
percent_duplicates: 900
percent_gc: 800
total_sequences: 700

table_columns_visible

Type: Dict[str, Union[bool, Dict[str, bool]]]

Hide or show specific columns. Top-level keys are module IDs, values are either a bool (apply to all columns) or a dict mapping column ID to bool.

Example:

table_columns_visible:
fastqc: false
samtools:
error_rate: false
raw_total_sequences: true

custom_table_header_config

Type: Dict[str, Any]

Override table column config. Same shape as custom_plot_config but for table headers.

Example:

custom_table_header_config:
general_stats_table:
"% Dups":
format: "{:,.1f}%"
max: 100
min: 0

Conditional formatting

table_cond_formatting_rules

Type:

Dict[str, Dict[str, List[CondFormattingRule]]]

Conditional cell formatting. Nested dicts map table ID (or the literal 'all_columns') to colour ID to a list of rules. Each rule has exactly one operator: string operators (s_eq, s_ne, s_contains) compare case-insensitively; numeric operators (eq, ne, gt, lt, ge, le) cast both sides to float. See the customisation docs for the full grammar.

Default value
all_columns:
pass:
- s_eq: pass
- s_eq: "true"
- s_eq: "yes"
- s_eq: ok
warn:
- s_eq: warn
- s_eq: unknown
fail:
- s_eq: fail
- s_eq: "false"
- s_eq: "no"
male:
- s_eq: male
- s_eq: M
female:
- s_eq: female
- s_eq: F
QCStatus:
fail:
- s_contains: fail

Example:

table_cond_formatting_rules:
all_columns:
fail:
- s_eq: fail
pass:
- s_eq: pass
- s_eq: ok
warn:
- s_eq: warn
mqc-generalstats-percent_duplicates:
fail:
- gt: 50
warn:
- gt: 20

table_cond_formatting_colours

Type: List[Dict[str, str]]

Background colours referenced by table_cond_formatting_rules. List of single-key dicts mapping a colour ID to a hex code.

Default value
- blue: "#337ab7"
- lbue: "#5bc0de"
- pass: "#5cb85c"
- warn: "#f0ad4e"
- fail: "#d9534f"
- male: "#5bc0de"
- female: "#d9534f"

Example:

table_cond_formatting_colours:
- pass: "#5cb85c"
- warn: "#f0ad4e"
- fail: "#d9534f"

Row merging

table_sample_merge

Type:

Dict[str, Union[str, CleanPattern, List[Union[str, CleanPattern]]]]

Group samples by merging rows of supporting modules' tables, by collapsing samples that match a pattern. Keys are the merged group name; values are a clean-pattern entry (a string suffix, or a {type, pattern} dict) or a list of such entries.

Examples:

table_sample_merge:
R1: _1
R2: _2
table_sample_merge:
R1:
- _R1
- pattern: "[_.-][rR]?1$"
type: regex
R2:
- _R2
- pattern: "[_.-][rR]?2$"
type: regex

Software Versions

software_versions

Type: Dict[str, Union[str, List[str], Dict[str, Union[str, List[str]]]]]

Manually specify software versions for the Software Versions section. Top-level keys are group or software names. Values are a single version string, a list of version strings, or a dict mapping software name to a version string or list of version strings (when the group contains multiple tools).

Examples:

software_versions:
bwa: 0.7.17
fastqc: 0.12.1
samtools: "1.20"
software_versions:
quast:
- 5.2.0
- 5.1.0
software_versions:
samtools:
htslib: "1.3"
samtools: "1.11"

versions_table_group_header

Type: str (default: "Group")

Column header for the grouping column in the Software Versions table. Defaults to 'Group'.

disable_version_detection

Type: bool (default: false)

Skip parsing software versions from module log files.

skip_versions_section

Type: bool (default: false)

Hide the Software Versions section.

Read & Base Counts

Short reads

read_count_multiplier

Type: float (default: 1e-06)

Multiplier applied to read counts before display. Default 0.000001 shows reads in millions.

Example:

read_count_multiplier: 0.001

read_count_prefix

Type: str (default: "M")

Suffix shown after formatted read counts, eg. 'M' for millions.

Example:

read_count_prefix: K

read_count_desc

Type: str (default: "millions")

Word used in plot/axis labels for read counts, eg. 'millions'.

Examples:

read_count_desc: thousands
read_count_desc: raw reads

Long reads

long_read_count_multiplier

Type: float (default: 0.001)

Multiplier for long-read counts. Default 0.001 shows counts in thousands.

Example:

long_read_count_multiplier: 1.0e-06

long_read_count_prefix

Type: str (default: "K")

Suffix shown after formatted long-read counts, eg. 'K' for thousands.

Example:

long_read_count_prefix: M

long_read_count_desc

Type: str (default: "thousands")

Word used in labels for long-read counts, eg. 'thousands'.

Example:

long_read_count_desc: millions

Bases

base_count_multiplier

Type: float (default: 1e-06)

Multiplier for base counts. Default 0.000001 shows bases in megabases.

Example:

base_count_multiplier: 0.001

base_count_prefix

Type: str (default: "Mb")

Suffix shown after formatted base counts, eg. 'Mb' for megabases.

Example:

base_count_prefix: Kb

base_count_desc

Type: str (default: "millions")

Word used in labels for base counts, eg. 'megabases'.

Example:

base_count_desc: kilobases

AI Summary

On/off

ai_summary

Type: bool (default: false)

Generate a short AI-written summary at the top of the report.

ai_summary_full

Type: bool (default: false)

Also generate a longer per-section AI summary. Requires ai_summary to be on.

no_ai

Type: bool (default: false)

Disable AI summaries entirely. Overrides ai_summary and ai_summary_full.

Prompts

ai_prompt_short

Type: str

Custom prompt prepended to the short AI summary request. Use to steer tone, length, or focus.

Example:

ai_prompt_short: Write the summary in one short paragraph aimed at a lab head, no
jargon.

ai_prompt_full

Type: str

Custom prompt prepended to the full-section AI summary request.

Example:

ai_prompt_full: Use bullet points and call out any sample that looks like an outlier.

Privacy

ai_anonymize_samples

Type: bool (default: false)

Replace sample names with placeholders before sending data to the AI provider.

Provider

ai_provider

Type: Literal["seqera", "openai", "anthropic", "aws_bedrock", "custom"] (default: "seqera")

AI provider used for summaries. One of seqera, openai, anthropic, aws_bedrock, custom.

ai_model

Type: str

Model name. Provider-specific.

Examples:

ai_model: gpt-4o
ai_model: claude-sonnet-4-5.

ai_custom_endpoint

Type: str

Base URL for the 'custom' provider, eg. a self-hosted OpenAI-compatible API.

Examples:

ai_custom_endpoint: http://localhost:11434/v1
ai_custom_endpoint: https://api.example.com/v1

ai_auth_type

Type: Literal["bearer", "api-key"]

Authentication scheme used by the custom endpoint. 'bearer' sends an Authorization header, 'api-key' sends an api-key header.

seqera_website

Type: str (default: "https://seqera.io")

Base URL used for Seqera Platform links in the report.

seqera_api_url

Type: str (default: "https://intern.seqera.io")

Base URL for the Seqera Platform API. Defaults to the public instance.

Tuning

ai_retries

Type: int (default: 3)

Number of times to retry an AI request on transient errors.

ai_extra_query_options

Type: Dict[str, Any]

Extra request-body fields merged into the AI request payload (provider-specific).

Example:

ai_extra_query_options:
temperature: 0.3
top_p: 0.9

ai_custom_context_window

Type: int

Override the model's context window in tokens. Set this if MultiQC's default for your model is wrong.

ai_max_completion_tokens

Type: int

Maximum completion tokens for OpenAI reasoning models.

ai_reasoning_effort

Type: Literal["low", "medium", "high"]

Reasoning effort for OpenAI reasoning models.

ai_extended_thinking

Type: bool (default: false)

Enable extended thinking on Anthropic Claude models that support it.

ai_thinking_budget_tokens

Type: int

Token budget for Anthropic extended thinking when enabled.

MegaQC

megaqc_url

Type: str

URL of a MegaQC instance to upload report data to after generation.

megaqc_access_token

Type: str

Auth token for the MegaQC instance.

megaqc_timeout

Type: int (default: 30)

Upload timeout in seconds when posting to MegaQC.

megaqc_upload

Type: bool

Upload report data to MegaQC after generation. Requires megaqc_url and megaqc_access_token.

Performance & Debugging

Profiling

profile_runtime

Type: bool (default: false)

Time each module and include the breakdown in the report.

profile_memory

Type: bool (default: false)

Track peak memory per module. Adds runtime overhead.

Logging

verbose

Type: bool (default: false)

Print extra debug log messages to the terminal.

no_ansi

Type: bool (default: false)

Disable ANSI colour codes in terminal output.

quiet

Type: bool (default: false)

Suppress non-essential log messages.

Linting

strict

Type: bool (default: false)

Treat module warnings as errors. Stricter than lint.

lint

Type: bool (default: false)

Deprecated. Run module linting and fail the build on issues. Used in MultiQC's own tests, rarely useful otherwise.

Developer

development

Type: bool (default: false)

Enable developer-mode features such as live JS reloading. For internal use.

report_readerrors

Type: bool (default: false)

Surface file read errors in the log instead of silently skipping them.

preserve_module_raw_data

Type: bool (default: false)

Keep each module's raw parsed data in memory after report generation. Used by Python API consumers.

Version check

no_version_check

Type: bool (default: false)

Skip the network check for newer MultiQC versions on startup.

version_check_url

Type: str (default: "https://api.multiqc.info/version")

URL queried by MultiQC's own update check. Set to override the default endpoint.

Special Types

SearchPattern

Configuration for file search patterns used to find tool outputs.

The SearchPattern type is used in the sp configuration option to define patterns for finding and parsing tool output files.

Example:

sp:
fastqc:
fn: "*_fastqc.zip"
custom_tool:
fn: "*.log"
contents: "Started analysis"

Properties:

  • contents (Union[str, List[str]]): File contents to match
  • contents_re (Union[str, List[str]]): File contents regex pattern to match
  • exclude_contents (Union[str, List[str]]): Exclude files containing this content
  • exclude_contents_re (Union[str, List[str]]): Exclude files containing this regex content
  • exclude_fn (Union[str, List[str]]): Exclude files matching this pattern
  • exclude_fn_re (Union[str, List[str]]): Exclude files matching this regex pattern
  • fn (str): Filename pattern to match
  • fn_re (str): Filename regex pattern to match
  • max_filesize (int): Maximum file size to process
  • num_lines (int): Number of lines to search
  • shared (bool): Allow file to be processed by multiple search patterns
  • skip (bool): Skip this search pattern

CleanPattern

Pattern for cleaning sample names.

The CleanPattern type is used in the fn_clean_exts and extra_fn_clean_exts configuration options to define patterns for cleaning sample names.

Example:

fn_clean_exts:
- type: truncate
pattern: '_S\d+_L\d+'
- type: regex
pattern: '\d{4}-\d{2}-\d{2}'

Properties:

  • module (Union[str, List[str]]): Module(s) to apply this pattern to
  • pattern (str): Pattern to match
  • type (Literal["truncate", "remove", "regex", "regex_keep"]): Type of pattern matching to use

GeneralStatsColumnConfig

Configuration for columns in the general statistics table.

The GeneralStatsColumnConfig type is used in the general_stats_columns configuration option to customize the appearance and behavior of columns in the general statistics table.

Example:

general_stats_columns:
fastqc:
columns:
percent_duplicates:
title: "% Dups"
description: "Percentage of duplicate reads"
scale: "RdYlGn-rev"
max: 100
min: 0

Properties:

  • ceiling (float): Ceiling value
  • description (str): Column description
  • floor (float): Floor value
  • format (str): Number format
  • hidden (bool): Whether column is hidden by default
  • max (float): Maximum value
  • min (float): Minimum value
  • namespace (str): Column namespace
  • placement (float): Column placement order
  • scale (str): Color scale
  • shared_key (str): Shared key name
  • title (str): Column title

CondFormattingRule

One conditional-formatting comparison for a table cell.

Used in the table_cond_formatting_rules configuration option. Each rule is a dict with exactly one operator key paired with its comparison value. String operators (s_eq, s_ne, s_contains) compare case-insensitively; numeric operators (eq, ne, gt, lt, ge, le) cast both sides via float().

Example:

table_cond_formatting_rules:
all_columns:
pass:
- s_eq: "pass"
fail:
- gt: 50

Properties:

  • eq (Union[float, int]): Numeric equality
  • ge (Union[float, int]): Greater than or equal to
  • gt (Union[float, int]): Strictly greater than
  • le (Union[float, int]): Less than or equal to
  • lt (Union[float, int]): Strictly less than
  • ne (Union[float, int]): Numeric inequality
  • s_contains (str): Case-insensitive substring match
  • s_eq (str): Case-insensitive string equality
  • s_ne (str): Case-insensitive string inequality

ModuleOverride

Per-module override values for top_modules and module_order entries.

Each entry in top_modules / module_order is either a module ID (string) or a single-key dict mapping the module ID to a ModuleOverride dict.

Example:

module_order:
- fastqc:
name: "FastQC (trimmed)"
anchor: "fastqc_trimmed"
path_filters:
- "*_trimmed*"

Properties:

  • anchor (str): HTML/section anchor for this module run
  • comment (str): Comment text rendered as markdown under the heading
  • custom_config (Dict[str, Any]): Module-specific config values merged into config.<module_id>
  • doi (Union[str, List[str]]): DOI or list of DOIs
  • extra (str): Extra HTML appended after the intro
  • generalstats (bool): Set to false to suppress this module's general-stats columns
  • href (Union[str, List[str]]): Tool homepage URL, or list of URLs
  • info (str): Intro text rendered as markdown under the section heading
  • name (str): Display name for this module run
  • path_filters (Union[str, List[str]]): Glob patterns restricting which files this module run sees
  • path_filters_exclude (Union[str, List[str]]): Glob patterns excluding files from this module run

SectionOrderOverride

Override dict accepted as a report_section_order value.

Each value in report_section_order is either the literal string "remove" (drops the section) or a SectionOrderOverride dict combining any of order, before and after.

Example:

report_section_order:
fastqc:
order: -10
custom_content-my-section:
before: fastqc
mod_section_2: remove

Properties:

  • after (str): Section/module/anchor ID to position this entry after
  • before (str): Section/module/anchor ID to position this entry before
  • order (int): Explicit numeric order