← SkillSafe / VCF Desk

Your VCF, checked against its own header before anyone trusts it

Paste a VCF — the header and as many records as you have. A reader in this page parses every ##INFO, ##FORMAT and ##contig declaration, validates each record against them, pins the reference build from the declared contig lengths, and computes Ti/Tv, missingness and per-sample depth. Then the model gives you the verdict, the findings and an ordered bcftools filter plan.

Both examples ship with a saved model run for every lane, so you can see all three complete outputs without signing in and without spending a credit.

nothing pasted yet
Drag a .vcf in, or Everything is read in your browser. Nothing uploads until you run. A gzipped .vcf.gz must be decompressed first — this page reads text.

This changes which QC expectations apply — a somatic callset is not judged against germline Ti/Tv or het/hom ratios.

Paste a VCF to price the run.

What this does, and what it does not

The prescan is a real VCF reader. Every ## meta line is parsed into its structured <ID=…,Number=…,Type=…> form with quoted Description values split correctly, so a comma inside a description does not corrupt the declaration. Each record is then validated against what the header declared: an INFO or FORMAT value whose comma count disagrees with its Number — including the A, R and G forms — is flagged with the line it happened on, because a reader that trusts Number will read past the end of that field into the next one. The reference build is pinned by matching declared contig lengths against known assemblies rather than guessed from the file name, so chr1 at 248,956,422 bases is GRCh38 and at 249,250,621 is GRCh37 — the distinction that silently corrupts a merged cohort.

It reads; it does not call variants, it does not fetch anything, and it never reaches your reference or your BAMs. Everything it finds is handed to the model as facts with stable ids that must each be reconciled, and the reconciliation is checked here afterwards — if the model skips a flag, this page says so. The interpret lane is deliberately constrained: it may only name genes that appear as text in your file, and every claim that would need a database becomes a gget query instead of an assertion. That is a real limit, and stating it is more useful than a confident sentence about gene function that nothing in your file supports.

Nothing to hand? Load the , a single-sample file with undeclared INFO keys, an unsorted block, a mixed contig naming convention and a low Ti/Tv, or the , a joint call carrying VEP consequences, a high-missingness sample and multi-allelic sites. Both replay a saved run for every lane, for free.