Six-Frame Translation, and When You Need All Six
8 min read · Updated September 12, 2026
A DNA sequence with no annotation can be read six different ways, and five of them are wrong. Six-frame translation is the brute-force answer: produce all six and let you look.
This guide covers where the six come from, how frames are numbered and where tools disagree about that, a worked example in which every forward frame is nonsense and the real protein is in frame minus one, and the distinction between translating six frames and finding open reading frames — which are related but are not the same operation.
Where six comes from
The ribosome reads three bases at a time, so where you start matters. Starting at base 1, base 2 or base 3 of a sequence gives three different, non-overlapping partitions into codons, and a fourth start at base 4 is just frame 1 again one codon along. That is three reading frames per strand.
DNA is double-stranded, and a gene can sit on either strand. The other strand is the reverse complement, which has its own three frames. Three plus three is six, and that is the entire derivation — there is no seventh frame.
The practical consequence is that if you have a fragment with no annotation and no known orientation, translating it once tells you almost nothing. One in six frames is the right one, and the other five will look like noise in a way that is easy to mistake for a bad sequence.
How the frames are numbered
Frames +1, +2 and +3 start at the first, second and third base of the sequence as given. That part is universal.
The reverse frames are where tools diverge, and it is worth knowing which convention you are looking at. The common one, and the one SeqBench uses, is that frames -1, -2 and -3 are the first, second and third frames of the reverse complement read from its own 5' end — which is the far end of the sequence you pasted. So frame -1 begins at the last base of your input and runs backwards.
The other convention anchors the reverse frames to the coordinates of the forward strand, so that frame -1 begins at the base that is in the same column as forward frame 1. On a sequence whose length is a multiple of three the two conventions agree; on any other length they do not, and a frame you found in one tool will be labelled differently in another. If you are carrying a frame number between tools, carry the translated protein as well and check they match.
Worked: the protein is on the other strand
Here is a 60-base sequence with nothing obviously special about it:
ACCATCTAATTCAACAAGAATTGGGACAACTCCAGTGAAAAGTTCTTCTCCTTTACTCAT
Translated in all six frames it gives:
- +1 TI*FNKNWDNSSEKFFSFTH — a stop codon three residues in.
- +2 PSNSTRIGTTPVKSSSPLL — no stops, but it does not start with a methionine and reads as nothing in particular.
- +3 HLIQQELGQLQ*KVLLLYS — another stop in the middle.
- -1 MSKGEELFTGVVPILVELDG — starts with M, runs 20 residues with no stop.
- -2 *VKEKNFSLELSQFLLN*M — stops at both ends.
- -3 E*RRRTFHWSCPNSC*IRW — a stop in position two.
Reading that result
Frame -1 is the answer, and it is the N-terminus of green fluorescent protein. The sequence above is the reverse complement of the first twenty codons of a GFP coding sequence, and every forward frame is the kind of thing that looks like a failed read.
Three signals separate it from the other five. It begins with a methionine, which is where translation starts. It contains no stop codon, where four of the other five frames do. And it is long — in a random sequence, stop codons appear roughly every 21 codons by chance, so any frame that runs much beyond twenty residues without one is already unusual.
That last point is the one to lean on for real fragments. A single forward frame that runs clean for a hundred residues while the other five are peppered with stops is not a coincidence; it is a coding sequence. This is the reasoning behind every ORF finder, applied by eye.
Six-frame translation is not ORF finding
These get conflated, and the difference matters when you pick a tool.
Six-frame translation is a pure transformation: give it N bases and it gives you six protein strings totalling roughly 2N/3 residues, including every stop codon as an asterisk. It makes no decisions, discards nothing, and always returns the same thing for the same input. That is what you want when you are inspecting a fragment yourself, checking whether a synthesised construct reads the way you intended, or confirming which strand a primer sits on.
ORF finding is a search with criteria. It looks for stretches bounded by a start and a stop, above a minimum length, possibly in specific frames, possibly requiring a particular start codon. It returns a shortlist rather than everything. That is what you want when you have a contig and the question is what genes are in it.
The reason to know which you are running: an ORF finder that returns nothing has told you something about your minimum-length threshold, not necessarily about your sequence. Six-frame translation cannot return nothing, so it is the better first look at a fragment you are unsure about.
What the asterisks mean, and what they do not
A stop codon translates to an asterisk rather than being treated as the end of the string, because in a six-frame view you want to see where the stops fall rather than have the output truncated at the first one. A frame full of asterisks is a frame you can discard; a frame with one asterisk at the very end is a complete coding sequence including its terminator.
A stop in the middle of an otherwise clean frame is worth a second look rather than immediate dismissal. The usual causes, in rough order of frequency: a sequencing error causing a frameshift a little upstream, a genuine internal stop from a nonsense mutation, an intron in a genomic sequence being translated as though it were a CDS, or a selenocysteine or pyrrolysine codon that the standard genetic code reads as a stop.
That last category is also the limit of the tool. SeqBench's translation uses the standard genetic code only. Vertebrate mitochondrial DNA reads TGA as tryptophan rather than stop and ATA as methionine; several other NCBI code tables differ elsewhere. A mitochondrial or ciliate sequence run through a standard-code translator produces frames that look broken and are not — the alternative genetic code tables page lists which codes differ where.
When six frames is the right tool
A fragment of unknown provenance. Someone sends a sequence with no context, or you find one in an old file. Six frames in one pass tells you immediately whether it is coding and in which orientation, and the clean frame gives you a protein you can search against a database.
Checking a construct you designed. Paste the insert and confirm that the frame you intended is the frame that reads through — this catches an off-by-one in a fusion junction, which is otherwise found weeks later at the Western blot.
A Sanger read whose orientation you are unsure of. Reverse primers give reads on the minus strand, and a read that translates cleanly only in a negative frame is telling you which primer it came from.
Confirming a primer's strand. A primer that matches nothing in the forward frames and matches in a reverse frame is the reverse primer, whatever it was labelled in the tube.
What it is not for: a whole genome, a large assembly, or anything where you want a list of genes rather than a look at the sequence. That is annotation, not translation.
Frequently asked questions
What is six-frame translation?
Translating a DNA sequence in all six possible reading frames at once: three on the given strand, starting at base 1, 2 and 3, and three on its reverse complement. It is the standard first look at a nucleotide sequence whose coding frame and orientation are unknown, because one of the six is right and the other five are usually visibly wrong.
Why are there six reading frames and not three?
Because DNA is double-stranded. Each strand has three frames, from starting at its first, second or third base; a fourth start would just be the first frame one codon along. A gene can sit on either strand, so a sequence with no annotation has six candidate readings.
What do frames -1, -2 and -3 mean?
The three reading frames of the reverse complement. In the most common convention, and the one SeqBench uses, frame -1 starts at the last base of the sequence you pasted and reads towards the first. Some tools instead anchor the reverse frames to forward-strand coordinates; the two agree only when the sequence length is a multiple of three, so carry the translated protein rather than the frame number when moving between tools.
How do I know which frame is the right one?
Look for the frame that starts with a methionine and runs without a stop codon. Stop codons occur roughly every 21 codons in random sequence, so a frame that runs clean for a hundred residues while the other five are full of stops is a coding sequence. If several frames look plausible, translate the candidate protein and search it against a database.
Is six-frame translation the same as finding ORFs?
No. Six-frame translation is a transformation that returns everything, including stop codons, and cannot return nothing. ORF finding is a search with thresholds — minimum length, required start codon — that returns a shortlist and can legitimately come back empty because of how you set those thresholds. Translate six frames when you want to look at a fragment; find ORFs when you want a list of genes.
What does the asterisk in a translated sequence mean?
A stop codon. It is shown rather than truncating the output, because in a six-frame view the positions of the stops are the information you are reading. A frame littered with asterisks can be discarded; a single asterisk at the very end marks a complete coding sequence with its terminator.
Why does my mitochondrial sequence translate badly in every frame?
Almost certainly because it is being read with the standard genetic code. Vertebrate mitochondria read TGA as tryptophan rather than stop and ATA as methionine, so a mitochondrial CDS run through a standard-code translator shows internal stops that are not really there. Several other NCBI genetic code tables differ in other codons — check which code your organism and compartment use before concluding the sequence is wrong.
Can I translate a FASTA file directly?
Yes — paste the record with its header and the header is ignored rather than having its letters read as bases, which is a real failure mode in tools that strip non-sequence characters too eagerly. IUPAC ambiguity codes are handled the same careful way: a codon is resolved whenever every base it could stand for gives the same amino acid, so AAR translates to K and TAY to Y, and only a genuinely ambiguous codon such as NNN comes through as X. Either way the frame register is preserved.
Related references
Related tools
Translate a nucleotide sequence to protein in any or all six reading frames.
Find open reading frames in all six frames and translate them.
Paste any unknown sequence and get a full identity report, then send it to BLAST.
Generate composition, ORF, restriction-site and primer summaries from one sequence.