Customising reports
MultiQC offers a few ways to customise reports to easily add your own branding and some additional report-level information. These features are primarily designed for core genomics facilities.
Note that much more extensive customisation of reports is possible using custom templates.
Titles and introductory text
You can specify a custom title for the report using the -i/--title
command line option. The -b/--comment option can be used to add a
longer comment to the top of the report at run time.
You can also specify the title and comment, as well as a subtitle and the introductory text in your config file:
title: "My Title"
subtitle: "A subtitle to go underneath in grey"
intro_text: "MultiQC reports summarise analysis results."
report_comment: "This is a comment about this report."
Note that if intro_text is None the template will display the default
introduction sentence. Set this to False to hide this, or set it to a
string to use your own text.
Report time and analysis paths
It's not always appropriate to include the file paths that MultiQC was run with in a report, for example, if sharing reports with others outside your organisation.
If you wish, you can disable the analysis paths and/or time in the report header with the following config parameters:
show_analysis_paths: False
show_analysis_time: False
Report Logo
To add your own custom logo to reports, you can add the following three lines to your MultiQC configuration file:
custom_logo: "/abs/path/to/logo.png"
custom_logo_dark: "/abs/path/to/logo-for-dark-mode.png"
custom_logo_url: "https://www.example.com"
custom_logo_title: "Our Institute Name"
custom_logo_width: 200 # Width in pixels
Only custom_logo is needed. The URL will make the logo open up
a new web browser tab with your address and the title sets the mouse
hover title text. Width allows you to adjust the logo size and dark
lets you have an alternate variant shown when the report is in dark mode.
Project level information
You can add custom information at the top of reports by adding key:value
pairs to the config option report_header_info. Note that if you have
a file called multiqc_config.yaml in the working directory, this will
automatically be parsed and added to the config. For example, if you have
the following saved:
report_header_info:
- Contact E-mail: "phil.ewels@seqera.io"
- Application Type: "RNA-seq"
- Project Type: "Application"
- Sequencing Platform: "HiSeq 2500 High Output V4"
- Sequencing Setup: "2x125"
Then this will be displayed at the top of reports:

Note that you can also specify a path to a config file using -c.
Listing software versions
If a software tool prints its version number in log output, MultiQC attempts to find this information and print it in reports (see Saving version information) for module developer documentation. However, not all tools make version information available in their log files. Additionally, some situations may require bespoke version number reporting, for example if software is found within multiple scopes in an analysis pipeline.
In these cases, you can manually add software version information to a report. This can be done in two different ways: by adding them into the MultiQC configuration, or by creating stand-alone YAML files with specific filenames and formats.
Both methods have the same syntax for the YAML configuration, with the exception
of MultiQC configuration files requiring a top-level software_versions.
The examples below are for a MultiQC config file.
If a provided software name exactly matches the name of a module that ran (case insensitive), then the version number(s) will be shown alongside the section heading. All software versions will be printed at the bottom of the report. This is the same behaviour as version numbers found within log files.
Option 1: Dictionary of software name and version pairs
The simplest way to provide version numbers is to give names and versions:
software_versions:
samblaster: "0.1.24"
quast: "5.2.0"
Make sure that you write the version in quotes to ensure it is being
interpreted as a string. For example, a version 1.10 without
quotes would be parsed as a float and displayed as version 1.1.
If you have run a tool multiple times and have multiple software versions, you can provide a list of versions:
software_versions:
samblaster: "0.1.24"
quast:
- "5.2.0"
- "5.1.0"
Option 2: Grouping software and versions
In more complex scenarios, you may have multiple version names that you want to group. For example, a tool that wraps other tools, or listing software version numbers grouped by analysis pipeline step.
Here, input is provided as a nested YAML dictionary with three levels:
group -> software(s) -> version(s).
software_versions:
samtools:
samtools: "1.11"
htslib: "1.3"
quast:
quast:
- "5.2.0"
- "5.1.0"
software_versions:
analysis_stage_1:
samtools: "1.3"
htslib: "1.3"
analysis_stage_2:
samtools: "1.11"
htslib: "1.11"
analysis_stage_3:
quast:
- "5.2.0"
- "5.1.0"
If a group and software have the same name (eg. samtools -> samtools),
the software name will not be repeated in the section header.
Software versions YAML file
If you prefer to provide versions in a separate YAML file, MultiQC will also
look for filenames ending in *_mqc_versions.(yml|yaml) in your search path,
for example rnaseq_mqc_versions.yml or mapping_mqc_versions.yaml. The
content of these YAML files should be a YAML dictionary, similar to the
previous examples but without the top level software_versions. For example:
samblaster: "0.1.24"
quast:
- "5.2.0"
- "5.1.0"
some_other_tool: "2023-1"
If multiple YAML files are found the content of these will be merged together.
Disabling automatic versions
In some applications, such as a pipeline workflow, you may wish to only include version information defined in the config file or in a separate YAML file. For this, it possible to disable parsing versions from the log file through the following config option:
disable_version_detection: true
Disabling software version report section
If you like, you can remove the Software Versions report section. Software versions will still be shown inline with the headings, where possible. To do this, use the following config option:
skip_versions_section: true
Note that setting this in combination with manually added version numbers could lead to versions not being included within the report.
Customize software versions table header
In the Software Versions report section the default table header for the column, listing groups of software, is "Group". This can be changed by setting the config option versions_table_group_header to your desired header name. For example:
versions_table_group_header: "Analysis Pipeline Step"
Sample name replacement
Occasionally, when you run MultiQC you may know that you want to change the resulting
sample names at run time. You can do this using the --replace-names option, which
allows you to change sample names during report creation.
Unlike --sample-names below, the original names never make it through to the report.
This can be useful if you know that you have a range of outputs that result in varying
sample names but want to create a consistent report - especially if you want
samples to line up properly in the General Statistics table.
To use, create a tab-separated file with two columns. The first column contains the search strings and the second the replacement strings:
IDX102934 Sample_1
IDX102935 Sample_2
IDX102936 Sample_3
Note that by default, partial matches are replaced. So if a log file gives a sample
name of IDX102934_mytool then the result will be Sample_1_mytool.
There are two config options to fine-tune this behaviour:
Setting sample_names_replace_exact to True in a MultiQC config file will tell
MultiQC to only change a sample name if the pattern fully matches the search string.
In the above example, IDX102934_mytool would remain unchanged.
Setting sample_names_replace_complete to True, the replacement string will be used
as a complete replacement if the search pattern matches at all.
In the above example, IDX102934_mytool would become Sample_1.
Use this method with caution! If aggressive cleaning of sample names results in multiple samples with identical identifiers, they will be overwritten.
To have more control over replacements, you can use regular expressions.
If you set sample_names_replace_regex to True in a MultiQC config file
and then create a file that contains regex search strings and even Python regex
group identifiers in the replace string. For example:
SAMPLE(\d)_([PS]E)_(\d) XXX_\1_\2_\3
With this file, SAMPLE1_PE_2 would be renamed to XXX_1_PE_2.
SAMPLE3_SE_4 would be renamed to XXX_3_SE_4.
Setting sample_names_replace_exact to True also works for regular expression
searches. The code uses the re.fullmatch function, so no ^ or $ anchors are needed.
Setting sample_names_replace_complete is ignored when using regexes.
If you want this behaviour then configure your regular expression to match the entire string.
For example, *(\d)_([PS]E)_(\d) \1_\2_\3 would rename SAMPLE1_PE_2 to 1_PE_2.
Finally, if you prefer not to use --replace-names with a TSV file, you
can set the search patterns in a MultiQC config file directly.
For example:
sample_names_replace:
IDX102934: Sample_1
IDX102935: Sample_2
IDX102936: Sample_3
Remember that backslashes must be escaped in YAML. So if using regular expressions you will need to use double-backslashes. You may also need to quote strings:
sample_names_replace_regex: True
sample_names_replace:
"SAMPLE(\\d)_([PS]E)_(\\d)": "XXX_\\1_\\2_\\3"
Bulk sample renaming in reports
Although it is possible to rename samples manually and in bulk using the report toolbox, it's often desirable to embed such renaming patterns into the report so that they can be shared with others. For example, a typical case could be for a sequencing centre that has internal sample IDs and also user-supplied sample names. Or public sample identifiers such as SRA numbers as well as more meaningful names.
It's possible to supply a file with one or more sets of sample names using the --sample-names
command line option. This file should be a tab-delimited file with a header row (used for
the report button labels) and then any number of renamed sample identifiers. For example:
MultiQC Names Proper Names AWESOME NAMES
SRR1067503_1 Sample_1 MYBESTSAMP_1
SRR1067505_1 Sample_2 MYBESTSAMP_2
SRR1067510_1 Sample_3 MYBESTSAMP_3
If supplied, buttons will be generated at the top of the report with your labels. Clicking these will populate and apply the Toolbox renaming panel.
Sample renaming works with partial substrings - these will be replaced!
It's also possible to supply such renaming patterns within a config file (useful if you're
already generating a config file for a run). In this case, you need to set the variables
sample_names_rename_buttons and sample_names_rename. For example:
sample_names_rename_buttons:
- "MultiQC Names"
- "Proper Names"
- "AWESOME NAMES"
sample_names_rename:
- ["SRR1067503_1", "Sample_1", "MYBESTSAMP_1"]
- ["SRR1067505_1", "Sample_2", "MYBESTSAMP_2"]
- ["SRR1067510_1", "Sample_3", "MYBESTSAMP_3"]
Show / Hide samples buttons
It is possible to filter which samples are visible through the report toolbox, but it can be desirable to embed such patterns into the report so that they can be shared with others. One example can be to add filters for batches, to easily scan if certain quality metrics overlap between these batches.
It's possible to supply a file with one or more patterns to filter samples on using the
--sample-filters command line option. This file should be a tab-delimited file with each
row containing the button name, whether the pattern should be hidden (hide) or shown (show)
and the patterns to be applied (all subsequent columns). If you want to use a regular expression
pattern, opposed to the default globbing, you can use hide_re and show_re.
For example, to filter on read pair groups, you could use the following file:
Read Group 1 show _R1
Read Group 2 show _R2
Or in regex mode:
Read Group 1 show_re .*_R1
Read Group 2 show_re .*_R2
To filter on controls and sample groups you could use:
Controls show input_
Conditions show group_1_ group_2_ group_3_
MultiQC automatically adds an Show all button at the start, which reverts back to showing all samples.
If you prefer, you can also add these buttons using a MultiQC config file:
show_hide_buttons:
- Read Group 1
- Read Group 2
- Controls
- Conditions
show_hide_mode:
- show
- show
- show
- show
show_hide_patterns:
- _R1
- _R2
- input_
- ["group_1_", "group_2_", "group_3_"]
Module and section comments
Sometimes you may want to add a custom comment above specific sections in the report. You can
do this with the config option section_comments as follows:
section_comments:
featurecounts: "This comment is for a module header, but should still work"
star_alignments: "This new way of commenting above sections is **awesome**!"
Comments can be written in Markdown. The section_comments keys should correspond to the HTML IDs
of the report section. You can find these by clicking on a navigation link in the report and seeing
the #section_id at the end of the browser URL.
To add a section comment for General Statistics, use the ID general_stats.