SubFly

Translating ASS Subtitles Without Breaking Styles, Signs or Karaoke

Formats & timing · 5 min read · Updated 21 October 2026

Which parts of an ASS subtitle file are safe to translate, and how to keep override tags, typeset signs, karaoke and vector drawings intact.

ASS (Advanced SubStation Alpha) files are the gold standard for anime fansubs because they can do far more than show text at the bottom of the screen. They position signs over the video, animate karaoke for opening songs, change fonts per character and even draw shapes. All of that lives in the same file as the dialogue - which means a careless translation can wreck it. This guide explains what's inside an ASS file, which parts you translate, and which parts you must leave alone.

Anatomy of an ASS file

An ASS file is plain text, organised in sections.

[Script Info] holds metadata and, importantly, the script resolution - PlayResX and PlayResY. Positions and font sizes are relative to this resolution, so it must not change.

[V4+ Styles] defines named styles. Each style sets a font, size, colours, outline, shadow, alignment and margins. A typical release has styles like Default, Italics, Signs, OP-Romaji and ED-English.

[Events] is where the subtitles live. Each line looks like this:

Dialogue: 0,0:05:12.40,0:05:14.90,Default,Hana,0,0,0,,{\an8}You're late again.

The fields are: layer, start time, end time, style, speaker name, left/right/vertical margins, effect, and finally the text. Only the text at the end is something you translate - and even that contains things that aren't words.

Override tags: styling inside the text

Text can contain override tags in curly braces. They change how that line, or part of it, looks:

Tag What it does
{\an8} Moves the line to the top centre (numpad positions 1-9)
{\pos(640,80)} Places the line at exact coordinates
{\i1} … {\i0} Italics on, then off
{\b1} Bold
{\c&H00FFFF&} Changes colour
{\fad(200,300)} Fades in and out
{\move(...)} Moves the line across the screen
{\k20} Karaoke timing for the next syllable
\N Forced line break

Some tags apply to the whole line (\an, \pos, \move, \fad); others apply to a span of words (\i1…\i0). This distinction is the heart of safe translation.

The three kinds of event lines

Not every line in [Events] is dialogue. Treat them differently.

1. Dialogue: translate the words, keep the line's tags

Most lines are spoken dialogue. Translate the words; keep the line-level tags exactly as they are. If a line starts with {\an8} because a character is speaking while the bottom of the screen is busy, the translated line needs {\an8} too, or it will cover whatever the typesetter was avoiding.

Word-level tags are trickier, because word order changes between languages. An italicised word in English may be a different position in the translation - or not exist as a single word at all. A good rule: keep line-level tags at the start of the line, and re-apply word-level emphasis where it makes sense in the target language rather than forcing it onto the same word position.

2. Signs and typesetting: usually leave alone

Typesetters create lines that sit on top of on-screen text - a shop sign, a letter, a phone screen - often with precise positions, rotations, colours and animations, sometimes split across several stacked layers. These lines are usually already translated (an English release's signs are in English), and their styling is painstaking work.

If you're translating into another language, you can translate a sign's words, but don't touch its tags, and be prepared for longer text not to fit the space it was designed for. In many projects the practical choice is to leave signs untouched.

3. Drawings, comments and empty lines: never send for translation

  • Vector drawings use drawing mode ({\p1} followed by commands like m 0 0 l 100 0 100 100 0 100). They're shapes, not text. "Translating" them produces garbage.
  • Comment lines start with Comment: instead of Dialogue:. Typesetters use them for notes and templates. They aren't shown, and they should come back exactly as they were.
  • Empty or tag-only lines carry effects without text.

Karaoke: the songs

Opening and ending songs are often karaoke-timed: each syllable has a {\k} tag with its duration in centiseconds, so the highlight sweeps along with the singing. Karaoke lines are usually romanised lyrics, frequently paired with a separate translation line in a different style.

Translating karaoke syllables breaks the timing, so the usual approach is:

  • leave the romaji karaoke lines as they are;
  • translate the separate lyric-translation lines (often styled OP-Translation or similar) as normal dialogue.

What goes wrong with general AI tools

Paste an ASS file into a general chat assistant and common failures include:

  • tags removed, rewritten or moved into the middle of words;
  • \N line breaks turned into real newlines, which breaks the file;
  • drawing commands "translated" into nonsense;
  • comment lines translated, or dropped;
  • the number of lines changed, shifting every following line's timing;
  • the header or styles reformatted.

How SubFly handles ASS files

SubFly was built around these rules. When you upload an ASS or SSA file:

  • Only dialogue text is translated. Comment lines, drawings and empty or effect-only lines are recognised and passed through exactly as uploaded.
  • Line-level tags are kept. Tags like {\an8} or {\pos} are lifted off before translation and put back on the translated line.
  • Timing and structure are untouchable. Every event keeps its start, end, layer, style, name, margins and effect; each batch must return the same number of lines or it's retried.
  • Your header and styles are preserved, so the translated file renders with the same fonts, colours and resolution as the original.

The result is a file you can drop straight back into your player or your release.

A safe translation checklist for ASS

  1. Keep [Script Info] and [V4+ Styles] unchanged.
  2. Translate dialogue text only.
  3. Keep line-level tags at the start of each line.
  4. Re-apply word emphasis where it fits the target language.
  5. Leave drawings, comments and karaoke syllables alone.
  6. Translate lyric-translation lines, not romaji karaoke.
  7. Check signs on screen - longer text may not fit.
  8. Play the result in a libass-based player (mpv, VLC) before release.

For how ASS compares to other formats, see SRT vs ASS vs VTT. For the full fansub workflow, read the complete guide to translating anime subtitles.

Related guides