Skip to main content

Turbo Picard

CI PyPI DOI

Picard workflows. Native speed.

Run selected Picard tools in Rust, using the command names and arguments your pipelines already understand. Accelerate a bottleneck, not a rewrite.

Turbo Picard is built for teams maintaining SAM/BAM/CRAM, VCF and sequencing-QC steps in Nextflow, WDL, Snakemake and shell workflows. Native commands avoid the JVM; the documented interface keeps migration local to the task you replace.

Familiar commands. Keep Picard command names and KEY=VALUE arguments. Inspectable results. Compare scientific outputs and retain an evidence bundle. Explicit execution. Distinguish native support from configured upstream fallback.

Start with one representative input. Native coverage is command- and option-specific; this is not the full upstream suite. Keep Picard for work outside the documented scope.

For coding agents and workflow generators, inspect the complete decision surface in one call:

turbo-picard capabilities --json

The schema-versioned response contains every Picard command's native/fallback status and trial fit together with the checked-in parity-gated benchmark evidence. Use turbo-picard trial --json <PicardCommand> ... for the exact task being considered. See the agentic-coder guide for the selection rule and safe substitution pattern.

Compact, native-only automation

Version 0.1.13 adds capabilities --json --command MarkDuplicates for compact discovery, executable argument arrays in trial JSON, and the strict TURBO_PICARD_REQUIRE_NATIVE=1 policy. See the agentic-coder guide. Inspection reports describe command scope, not proof that a particular input or option is validated.

Quick Start

Install from PyPI:

python3 -m pip install turbo-picard

For a containerized trial, use the published release image:

docker run --rm ghcr.io/dnncha/turbo-picard:0.1.13 --version

Installing from PyPI currently gives you both commands:

  • turbo-picard: the explicit command for evaluation and normal use.
  • picard: a compatibility shim for environments where you deliberately want existing picard calls to resolve to this package.

Use the explicit turbo-picard command while testing. Add the shim to a pipeline environment only after the specific commands you need have been checked.

Check the install and print a trial contract before changing a workflow:

turbo-picard --version
turbo-picard MarkDuplicates --help
turbo-picard doctor
turbo-picard trial MarkDuplicates I=input.bam O=marked.bam M=metrics.txt

The trial command prints matching Picard and turbo-picard invocations, declared outputs, fallback state, and comparison notes. Then run the chosen command on a representative input:

turbo-picard MarkDuplicates I=input.bam O=marked.bam M=metrics.txt

From a repository checkout:

cargo install --locked --path crates/turbo-picard-cli --bin turbo-picard --bin picard

Prove the switch on your data

The repository includes an evaluator that runs both implementations in separate output paths and records versions, timings and output digests. It does not upload your data. See the real-data evaluation guide for a copyable command and the interpretation of a match or mismatch.

The next-release evaluator uses disk-backed sorting for large comparisons, preserves existing evaluation directories, and retains failed runs for diagnosis. These repository-tooling improvements are not a claim about native command speed. It measures the comparison helper, not the native genomics commands.

When It Helps

  • You already run Picard commands and want to trial one slow step first.
  • You need Picard-style command names and KEY=VALUE arguments to stay stable.
  • You want a command-by-command rollout with upstream Picard available for unsupported or unchecked behavior.
  • You can compare outputs on a representative BAM, CRAM, FASTQ, VCF, or metrics file before changing the workflow.

Good first trials are usually MarkDuplicates, SortSam, SamToFastq, FastqToSam, FixMateInformation, BuildBamIndex, and repeated metrics commands. Use turbo-picard trial <PicardCommand> ... to print a side-by-side Picard and turbo-picard evaluation contract before changing a workflow.

When To Stay With Picard

  • You need an option or command that is not inside the documented native scope and cannot use fallback.
  • You require Picard-equivalent chart rendering rather than checked metrics text.
  • You have not compared the exact command, input shape, sidecars, metrics, exit code, and error behavior your workflow depends on.
  • You need broad cohort evidence before trying a representative shard.

Documentation

The full docs are on Read the Docs:

https://turbo-picard.readthedocs.io/en/latest/

Useful starting points:

Starter workflow files live in packaging/workflows/. The smallest trial shape is packaging/workflows/one-command-trial.md. Migration patterns that usually keep the surrounding workflow stable include per-read-group SamToFastq, sequential-shard FastqToSam, and mate-repair boundaries around FixMateInformation. If you run a real one-command evaluation, share the result through the trial report issue form; successful matches, mismatches, and adoption blockers are all useful evidence. If GitHub does not offer new-issue creation, add the same redacted report as a comment on the public trial report thread. From a repository checkout, tools/compare_real_data.py --shareable-report can create a reviewed, privacy-conscious starting point for that report.

Benchmarks

The saved public benchmark suite compares native turbo-picard commands against Picard 3.4.0 and checks stable outputs before reporting speed. Current saved results report 32/32 parity checks passing, with 272.12x top speedup: NormalizeFasta, 22.88x floor speedup: SetNmMdAndUqTags, 99.51x median speedup, and 84.52x geometric mean speedup.

Read these as small-fixture measurements, not whole-genome speedups. For example, the saved MarkDuplicates case used the generator's reads=50000 setting, with median wall times of 0.075464 seconds for Turbo Picard and 2.238986 seconds for Picard across three runs. Startup overhead matters at this scale. The reported speedup is the median of paired-run ratios, which need not equal the ratio of those independent medians. The machine-readable evidence now preserves timings, repeat counts and generator parameters alongside ratios.

Summary: 32/32 PASS; 272.12x top speedup: NormalizeFasta; 22.88x floor speedup: SetNmMdAndUqTags; 99.51x median speedup; 84.52x geometric mean speedup.

Benchmark details, scope notes, real-data evidence, and reproduction commands are in the benchmark docs. The parity guide explains what the comparisons do and do not prove. For CollectBaseDistributionByCycle, CollectGcBiasMetrics, CollectInsertSizeMetrics, MeanQualityByCycle, and QualityScoreDistribution, metrics text is the parity target; chart outputs are lightweight PDF summaries, not Picard-equivalent rendered plots.

Saved benchmark run:

  • Date: 2026-08-14
  • Command: python3 tools/bench_suite.py --repeats 3 --skip-build
  • Raw log: docs/site/assets/bench-suite-output.txt
  • benchmark exceptions: AccelerationStatus, capabilities, doctor, explain, and trial are utility commands, not Picard workload comparisons. CollectHsMetrics has separate ALL_READS and sidecar parity coverage, plus a real-data comparator path for pinned WES/capture intervals; representative capture-data performance evidence is still pending.
Command Speedup Parity
NormalizeFasta 272.12x PASS
BuildBamIndex 243.53x PASS
UpdateVcfSequenceDictionary 207.52x PASS
CollectGcBiasMetrics 196.45x PASS
CreateSequenceDictionary 152.62x PASS
GatherVcfs 130.70x PASS
LiftoverVcf 127.28x PASS
CollectMultipleMetrics 122.66x PASS
CollectInsertSizeMetrics 117.34x PASS
CleanSam 115.42x PASS
MergeVcfs 112.13x PASS
MeanQualityByCycle 108.66x PASS
CollectQualityYieldMetrics 108.64x PASS
QualityScoreDistribution 107.17x PASS
ReplaceSamHeader 101.84x PASS
ValidateSamFile 99.56x PASS
IntervalListTools 99.46x PASS
CollectBaseDistributionByCycle 98.01x PASS
SortVcf 89.01x PASS
CollectAlignmentSummaryMetrics 83.49x PASS
BedToIntervalList 79.78x PASS
ViewSam 79.58x PASS
AddOrReplaceReadGroups 77.78x PASS
SamToFastq 77.74x PASS
CollectWgsMetrics 50.81x PASS
MergeSamFiles 35.49x PASS
SortSam 35.15x PASS
FixMateInformation 31.98x PASS
FastqToSam 31.29x PASS
MarkDuplicates 28.70x PASS
RevertSam 24.19x PASS
SetNmMdAndUqTags 22.88x PASS

Release evidence checks:

python3 tools/update_real_data_manifest.py
python3 tools/verify_benchmark_log_evidence.py
python3 tools/verify_benchmark_suite_coverage.py
python3 tools/verify_benchmark_thresholds.py
python3 tools/verify_real_data_evidence.py
python3 tools/verify_real_data_evidence.py --release-ready

Real-data evidence lives in benchmarks/real-data/ and records pinned input sources, command scopes, and input SHA-256 hashes. Current release-candidate dataset IDs are gatk-na12878-mito, picard-snvq, and gatk-na12878-mito-cram.

Workflow evaluation

The project publishes a workflow validation protocol, a compatibility contract, and a production-scale benchmark format. Use these before changing a workflow. The opt-in Nextflow process candidate is documented under packaging/nf-core.

A command-level speedup is not a universal replacement claim. Keep upstream Picard available until representative BAM/CRAM evidence, output parity, failure behaviour, and independent review pass for the exact workflow.

Packaging Status

The current source release is 0.1.13. Release builds target Linux x86_64 and ARM64, macOS Intel and Apple Silicon, plus a source distribution. Publication is gated on artifact validation and installation smoke tests; the release page and PyPI identify the published artifacts. The Linux ARM64 wheel is cross-built and artifact-validated.

Read the release notes for the release scope and evidence boundaries.

The submitted Bioconda recipe PR covers the main package and an optional shim. Use PyPI or the container image until Bioconda accepts the PR and the packages appear in its indexes. The main package installs turbo-picard; the separate shim package installs the picard command only for environments that choose it.

Citation

Cite the archived turbo-picard release you used with CITATION.cff. Benchmark and validation inputs should be cited separately with immutable source URLs, commits or accessions, and input SHA-256 hashes.

Docs source lives in docs/. JOSS submission notes are tracked in docs/joss-submission.rst.

Contributing

Bug reports, parity evidence, documentation fixes, and small command-coverage improvements are welcome. Start with CONTRIBUTING.md and the development docs.

Support: SUPPORT.md. Security: SECURITY.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

turbo_picard-0.1.13.tar.gz (246.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

turbo_picard-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

turbo_picard-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (9.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

turbo_picard-0.1.13-py3-none-macosx_11_0_arm64.whl (9.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

turbo_picard-0.1.13-py3-none-macosx_10_12_x86_64.whl (8.7 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file turbo_picard-0.1.13.tar.gz.

File metadata

  • Download URL: turbo_picard-0.1.13.tar.gz
  • Upload date:
  • Size: 246.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for turbo_picard-0.1.13.tar.gz
Algorithm Hash digest
SHA256 b118461b9dacef6c1d777fe47875dcc0ae2be6ec1bbcc1c49b6d2a3942e5faef
MD5 98544914d95b7e85655af4afd679313d
BLAKE2b-256 2f07cbd9860d5df1bbc1efc755a13d0a43ba34983d4a127f36d578cd70ea437d

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbo_picard-0.1.13.tar.gz:

Publisher: publish-pypi.yml on dnncha/turbo-picard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbo_picard-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turbo_picard-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f697b165e7ae5028a8064271b1c8aa0d7db37fb966e4f8e2e67ec90380b9325b
MD5 e2e0091e22e4ed3b6ec9e01afd3aa7ef
BLAKE2b-256 4ef412dcf4fe4f4b1592c537e5e2d77509f5cca85538e58af13d253cdf12a381

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbo_picard-0.1.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on dnncha/turbo-picard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbo_picard-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turbo_picard-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca06bfa6a85ee998f2b9211e617ce3298e055460ce37937b23e9c194a9cb275b
MD5 3b98fadb0bef845356998a5601066e97
BLAKE2b-256 ba0b35548c8078fc3e47fcc9705b6827121f6b6cb8e303bd3bd5b568850c6636

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbo_picard-0.1.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on dnncha/turbo-picard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbo_picard-0.1.13-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turbo_picard-0.1.13-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3ea8d125133e8d67cdb1e55c8757ae39f68a0ac7e6c4608c0cd4363035fcff6
MD5 51f6aae56693b888d2296dd7e55cdf37
BLAKE2b-256 c640d4d709e64516b26f83865f4db0f8ed590429a2a6306e3399dc99209e3d25

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbo_picard-0.1.13-py3-none-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on dnncha/turbo-picard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file turbo_picard-0.1.13-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for turbo_picard-0.1.13-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 18027dde55628b78ae22bb48b16e064b2759985673d6bec6faaedd12497ea2a8
MD5 38c9ea24357660b80bbef169c8204276
BLAKE2b-256 54d389904e453572b70f45caee20e6d1f87c8f7c8504a2dc3531fb668306a8f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for turbo_picard-0.1.13-py3-none-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on dnncha/turbo-picard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.13 This release

5 files

0.1.12

5 files

0.1.11

5 files

0.1.10

3 files

0.1.9

3 files

0.1.8

3 files

0.1.7

3 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page