CARVIEW |
Navigation Menu
-
Notifications
You must be signed in to change notification settings - Fork 232
SSA Version History
This page tries to gather information about older SSA subtitle format versions as a historic note. Versions before v4 are not supported by libass and not supported properly in VSFilter either. For authoring new subs, don’t use legacy SSA versions; use ASS (v4+) and see the ASS File Format Guide.
It is based on archived information from the original Sub Station Alpha editor by Kotus and basic experiments with a copy of v4.08 without a genlock device (see last section for details and links to the most relevant resources).
This pretends there are no errors in the documentation and the sample files are all valid and what they claim to be, unless this information already contains contradictions itself.
Basic familiarity with ASS or VSFilter-flavoured SSAv4 is assumed; this focuses on the differences from the latter.
The limited resolution of archived snapshots and the news entries on the website being truncated means there’s some uncertainty wrt to the exact release dates.
v1: |
≤ 1996 (v1.03 was released on 1996.11.23; the copyright date in v5 preview suggest the first release was within 1996) |
---|---|
v2: |
early 1997 (v2.02 was released in between 1997.02.03 and 1996.06.09) |
v2.99: |
1997.08.03, served as an in between which already had some but not yet all of v3’s features The only archived information about it seems to be the v2.99 news page. No attempt was made to reconstruct its file layout. |
v3: |
late 1997 (likely around 1997.09.21 which Kotus was previously targeting) |
v4: |
early 1999? (at 1998.12.02 v4.00 wasn't released yet, at 1999.01.17 it already was)
The last proper release of SSA was v4.08 on 2000.06.25.
|
v5 Beta: |
released together with v4.08 in 2000. It did not contain any format changes (yet) afaict, only editor improvements. After that no new updates were posted on the website afaict before it went offline around 2003. |
Initially Sub Station Alpha needed a registration key, but by February 1997 a valid key was published next to the download and during v2 it became regular freeware [1].
Sections and Format:
lines were only introduced in v4 [2].
Before this, the available files written by Sub Station Alpha
still put all headers, styles and events into the typical order,
but without any empty lines in between or sections.
The ScriptType
header only starts to appears in files with v3.
However, except for many (early?) v1 files, there are in-file
comments indicating the version.
In some v3 and v4 files there is a leading Comment:
line using v1’s
event format informing any readers about the version of this file and that
a newer SSA program is needed.
Comment:
events which show up in editors, any line prefixed with !:
was an in-file comment not visible from editors.
Sub Station Alpha used this to document which major version of Sub Station Alpha created the file
and insert a link to its webpage.!:
is neither explicitly ignored nor ever written.
SSA v4 added ;
-prefixed lines as comments specific to the [Script Info]
section and
changed to recording the creation information with those new comments instead of regular in-file comments.
VSFilter and later exclusively use semicolon comments.In the sample files, v1 files only set the Timer
header.
In v2 files Synch Point
and all the usual metadata headers already appear.
Only with v3 PlayRes{X,Y}
, PlayDepth
and Collisions
begin to show up.
Support for embedded font and picture files was added only in v4 [3].
Since actual Format:
lines were only introduced in v4,
pseudo format lines shown for earlier versions merely serve as
a compact description of what the fields were used for.
They would not show up in files.
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
- v2 added the
Effect
field - v2.99 introduced midtitle and toptitle event alignment values.
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Text
Since actual Format:
lines were only introduced in v4,
pseudo format lines shown for earlier versions merely serve as
a compact description of what the fields were used for.
They would not show up in files.
Unlike in VSFilter-flavoured SSAv4 and ASS, Shadow and Outline values are limited to at most 4px (and just like in guliverkli1 only integers).
In Sub Station Alpha (confirmed for v4.08, very likely also earlier versions)
the “opaque box” border style behaved differently from VSFilter-flavoured BorderStyle=3
.
Instead of putting a rectangle background behind each glyph run,
a single rectangle covered the whole event (similar to libass’ BorderStyle=4
).

Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
v4 added Encoding
and split Shadow and Outline making it possible to have both simultaneously.
AlphaLevel
still does nothing and the editor will discard any values written in this field
and renormalise them to 0 on saving.
According to v4’s progress report and docs a non-zero shadow will enforce a 1px outline.
Reminder: v4.08’s BorderStyle=3
acts differently from VSFilter-flavoured BorderStyle=3
.
And unlike BorderStyle=1
, BorderStyle=3
can still not be combined with shadows.
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, ShadowColour, Bold, Italic, FontEffect, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel
v3 added the Alignment
values for mid- and toptitles.
And while the AlphaLevel
field already exists, it is documented to
be ignored and different available sample files write both 0
and 255
into
this position indicating that one really should just discard it [4].
Furthermore, instead of BorderStyle
the docs call this field FontEffect
, and BackColour
is called ShadowColour
(reminder: Outline
and Shadow
aren't split yet).
How exactly this worked is a bit tricky to nail down since the v3 format doc, v3 user guide,
Kotus’ news announcements and sample files disagree with each other.
true
(shadows) and 0 false
(no shadow).
The following field also is only documented to control shadow “width”.
Outlines are only mentioned wrt to there being no inline override for “shaodw/outline type and depth”
and ShadowColour
controlling the “outline shadows”.FontEffect=0
BorderStyle=3
.0/-1
boolean
in all format versions. Available v1 samples all use a positive value of 1
, v2 samples 0
and 2
and v3 samples 0
and 1
.My best guess is that the format doc is erroneous in this regard and
-
Shadow
controls the width of both outlines and shadows -
-
FontEffect
is a enum-like with -
-
0
no effect -
1
normal outlines, no shadows -
2
shadows, no outlines -
3
boxed outlines, no shadows
-
-
This matches up with modern BorderStyle=1,3
and would explain why there is no BorderStyle=2
[5].
This is further supported by BAKAsub’s source code, a independent implementation
intending to be SSA3-compatible, which declared its ShadowType enum members in the order
SHADOW_NONE
, SHADOW_OUTLINE
, SHADOW_DROP
, SHADOW_BOX
and SHADOW_ALPHA_BOX
.
The last one does not have a corresponding type in SSA docs or v4.08’s GUI afaict
and might be a BAKAsub extension.
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, ShadowColour, Bold, Italic, FontEffect, Shadow, Alignment, MarginL, MarginR, MarginV
The same note wrt FontEffect
as in v3 applies here, just that the
“OpaqueBox” style (ASS: BorderStyle=3) definitely did not yet exists.
Support for event effects was added in v2 (since before there was no field for it).
Information on what was supported in v2 is missing
and current samples do not use any Effects.
Judging from the available files, v2 put !Effect
into the Effect field of events without one.
Later versions just use an empty string for this.
In v3 Karaoke
and Scroll up
were supported.
v4 added Banner
[6].
Information on v1 and v2 is missing.
Both v3 and v4 support the same set of event types:
- Dialogue
- Comment [7]
- Picture
- Movie
- Sound
- Command
There are no records if or which types v3 added, but
v2 added Sound and Movie events.
Our v1-v2 sample files only use Dialogue
and Comment
events.
(ScriptClub Archive contain v3 files with picture and sound and v4 with command events.)
Across all v1-v4 files some also have Wav:
lines with a path to an audio file
at the beginning. Those lines do not follow the usual format and are not
mentioned in the available documentation. Their purpose is unclear.
Some but not all Comment
lines in v2 and v1 files have non-Text, non-Effect
fields stripped. In v1 many comment lines have timing and actor information
stripped from their respective fields but prepended it to the comment’s text.
Added: \r
, \fe
, \N
Prior to the addition of \N
, \n
was the only and also always a hard line break.
Supported all of: \k
, \a
, \c
, \fs
, \fn
, \i
, \b
, \n
Note, no variants of \c
for the individual colours existed, only plain \c
.
Prior to v2.99 all override tags always applied to the whole (remaining?) line according to the 2.99 news announcement (see remarks for v1).
Due to missing documentation we don't know what exactly was supported, but in our selection of sample files the earliest version containing each of v3’s tags were:
-
\k
: v3 -
\a
: v2 -
\c
: v2 -
\fs
: v2 -
\fn
: v2 -
\i
: v2 -
\b
: v3 -
\n
: v1
Sub Station Alpha v1 appears to have had a different incompatible flavour of
override tags. Its override tags are not placed into familiar {}
blocks,
mostly use uppercase letters and no explicit separation of argument and the
following text, instead relying on a fixed argument length.
In our samples the following are used:
-
\I
without any argument -
\F
with either1
,2
or5
as an argument -
\n
without argument -
\N
without argument -
\C
with arguments1
,3
to7
andF
Some sample lines suggest, the effect of those tags is cancelled by \\N
, e.g.:
Excellent! I \Iwill\N~ get my hands on it! Who in the world \Iare\N~ you? I guess it is \Ngetting dark
Others suggest this is not the case for \n
linebreaks:
\IAnyways, Rikako didn't pay the money back. \nNot even at the "Golden Week". \n\CF(Vacation - 1st week of May) \ILet our souls fall to the earth;\nLive as one with the winds. \IFrom now on, I'll\nforget that I'm a girl. \C5Gamlin ? You're on\nthe Riviera, right ?
And finally:
-~Laputa~-\n\N\F1Castle in the Sky
The above and more samples also strongly suggests, override tags only take effect _after_ their placement and not for the whole preceding line.
We can only speculate about their effect and meaning since there’s no way to render them and no documentation. One plausible albeit entirely made-up interpretation (drawing from similarity to later versions):
-
\I
either enables italic or flips the italic setting from the style -
\N
sets the font style to “normal”, i.e. upright. It might also reset other override effects (and maaayyybeee bold+italic from the style, but while this fits samples without a preceding tag, it would look odd on others) -
\n
is a forced linebreak -
\C
chooses between predefined colour values. Those values cannot come from the style since we have sample files using this without any styles or with fewer style colours (4 per style) than the used argument values. -
\F
unknown, possibly something wrt to font selection or size
While {}
override blocks did not yet exists, actor names in the even field
were often put in curly braces and the two v1 files (5684184, 5684278) which
uses curly braces in the event text pair a curly brace with a round bracket.
This may be just a stylistic choice (some also use two backticks and single
quotes each for quoting), or indicate curly braces already functioned as inline
comments if properly paired.
Furthermore, it seems probable ~
was a (non-breaking?) space used for positioning.
There is no mention of this in the available docs, BAKAsubs does not parse it and as of
Sub Station Alpha v4.08, ~
is only a regular character for sure.
(In v4.08 whitespace is trimmed from the event text, but not from each line,
allowing regular spaces to be used for positioning)
Note: there are a few odd files using v1-style tags in newer revisions, but this diverges from all other files and at least v4.08 does not parse those. Presumably they are just the result of an improper port from v1. (e.g. 62886, 2183396).
- Version 3.02 (1997.12.24) added JS2SSA.EXE by Elfreya to convert JACOsub files to SSA while retaining colour information etc (in the previous internal import they were discarded)
-
- Sub Station Alpha could import at least the following other formats:
-
- JACOsub
*.js
- SubSonic
*.sub
- ZeroG
*.zeg
- Macsub
*.mac
- Phoenix Japanimation
*.pjs
- Turbo Titler
*.tts
- RealText
*.rt
- Plain Text
*.txt
- The docs also mention importing
*.odd
files, but this extension doesn't show up in v4.08’s open dialogue.
- JACOsub
- At least the one sample which identifies itself as
2.99
only does so in credits added by the subbers. It seems there was no dedicated version comment (and also noScriptType
header yet) for 2.99. -
PlayDepth
andTimer
≠100.0000
are used even in some of the available files - The descriptions make it clear that
Collision: Reverse
was meant to precalculate the positions of all implicitly positioned events, such that earlier ones appear above later ones while still not being moved after their initial appearance. This is impossible to support on softsub renderers with the current muxing conventions or when subtitle data is streamed without regards to overlapping events. (And no one supports it now) - “smart wrapping” already existed, but it was apparently not a script header, but an editor setting
- similarly a “continuous karaoke highlighting” option was added in v4 acting like
\kf
- At least for v4.08 Sub Station Alpha is usable without a genlock device. The preview only shows a single event and doesn't render all features, but the edit-playback mode will fully render everything in fullscreen on a blank background.
VSFilter can read and write SSAv4 files, ASS (v4+) and read v4++. However, its flavour of SSAv4 differs in several ways from genuine Sub Station Alpha v4. For one, only Dialogue (and effectively Comment) events are implemented, it does not parse section headers or format lines, the shift direction of vertically middle aligned subs is reversed and probably many deviations on edgecases.
As noted in the Styles section, BorderStyle=3
of genuine v4 used a single Rectangle for the whole event instead of one rectangle per glyph run.
Genuine v4 did not actually use the AlphaLevel
field.
VSFilter does not recolour implicitly positioned events which are shifted to avoid collisions.
In VSFilter many argument-less tags reset to the style’s value. In Sub Station Alpha (v4.08), e.g. an empty colour tag instead acts as if a zero was passed in.
In practice, virtually all SSAv4 files distributed as softsubs expect VSFilter-flavour SSAv4, so this is what libass also implements (or rather aims to implement) [8].
[Fonts]
, but section headers
were only introduced in v4.
(This is despite it not parsing or caring about sections otherwise.)
- Format Doc v4
- Format Doc v3
- User Guide v3
- User Guide v2
- v2.99 News Page
- v4 progress report
- v5 Preview News
- Archived v4.08 installer
- BAKAsub source code (independent re-implementation of SSAv3; might not be fully accurate or contain custom extensions)
(Early?) v1 without a v1 marker:
890545 890545 5677014 5677015 5677016 5677017 5677018 5677019 5677020 5677021 5677022 5677023 5677024 5677025 5677026 5677027 5677028 5677029 5677030 5677031 5677032 5677033 5677034 5677035 5677036 5677037 5677038 5677039 5677040 5677041 5677042 5677043 5677044 5677045 5677056 5677057 5677058 5677059 5677060 5677061 5677064 5677065 5677066 5684126 5684127 5684128 5684129 5684130 5684131 5684132 5684133 5684134 5684135 5684136 5684137 5684138 5684139 5684140 5684141 5684142 5684143 5684144 5684145 5684146 5684147 5684148 5684149 5684150 5684151 5684152 5684153 5684154 5684155 5684156 5684157 5684158 5684159 5684160 5684161 5684162 5684163 5684164 5684165 5684166 5684167 5684168 5684169 5684174 5684175 5684176 5684177 5684178 5684179 5684180 5684181 5684182 5684183 5684184 5684185 5684186 5684187 5684188 5684189 5684190 5684191 5684192 5684193 5684194 5684195 5684196 5684197 5684198 5684199 5684202 5684203 5684204 5684205 5684206 5684207 5684208 5684209 5684210 5684211 5684212 5684213 5684214 5684215 5684216 5684217 5684218 5684219 5684220 5684221 5684222 5684223 5684224 5684225 5684226 5684227 5684228 5684229 5684230 5684231 5684232 5684233 5684234 5684235 5684236 5684237 5684238 5684239 5684240 5684241 5684242 5684245 5684246 5684247 5684248 5684249 5684252 5684253 5684254 5684255 5684256 5684258 5684259 5684260 5684261 5684262 5684263 5684264 5684265 5684266 5684267 5684268 5684269 5684270 5684271 5684272 5684273 5684274 5684275 5684276 5684277 5684278 5684279 5684280 5684281 5684282 5684283 5684284 5684285 5684286 5684287 5684288 5684289 5684290 5684291 5684292 5684293 5684294 5684295 5684296 5684297 5684298 5684300 5684301 5684302 5684303 5684304 5684305 5684306 5684307 5684308 5684309 5684310 5684311 5684312 5684313 5684314 5684315 5684316 5684317 5684318 5684319 5684322
v1 (with version comment):
886358 886358 886364 886364 5677010 5677011 5677012 5677013 5677062 5677063 5684170 5684171 5684172 5684173 5684200 5684201 5684250 5684257 5684299
v2 and v2.99:
2400678 2400680 5684243 5684244 5684251 5684321 5684325 5684326 5684327 5684328 5684329 5684330 5684331 5684332 5684333 5684334 5684336 5684337 5684338 5684339 5684340 5684341 # Self-declared as v2.99: 5684335
v3:
2177777 2177778 2237051 2237052 2406573 5643546 5684323 5684324
As well as all SSA files from the ScriptClub.org Archive containing:
- 832 SSA
- 1370 JACOsub
- 687 plain text
- 166 TurboTitler
- 160 RealText
- 140 SMI
- 109 Phoenix Animation
- 105 ZeroG
- many more (individually rarer) file extensions
So far no format docs for v2 or any docs for v1 could be located.
I also don't have binaries of SSAv1 or v3. While I have binaries for v2.02 and v2.99, the companion DLL packs are missing and at least with the replacements I grabbed from random sites on the internet, both binaries just crash with an “OLE automation error” on startup in Windows 98 SE.
If you have access to more documentation, genuine Sub Station Alpha file pre-v4, a backup of SSA’s mailing list or any other further information, it would be awesome if you could share them. See libass’ readme for our IRC and feel free to ping Oneric.
















[1] | A remark on fansubs.net suggest this de-facto and later proper transition to freeware was prompted by someone cracking the activation algorithm. |
[2] | And these Format: lines were explicitly intended to be parsed
to allow (easier) graceful handling of newer/older format version.
But ofc, SSAv5 was never released and VSFilter ignores them again. |
[3] | And according to docs they actually had a kind of explicit termination since all but the last lines were required to be exactly 80 characters long. In VSFilter-flavour this is more messy iinm. |
[4] | This presumably fell victim to the feature cuts Kotus had to make for v3 after starting an important project at the dayjob. See Kotus’ news announcment from 1997.09.06. |
[5] | However, on the other hand it seems odd for this error to persist
throughout v1, v2 and v3’s manual while other descriptions got updated.
Also the user guide suggest just setting shadow/border width to 0 already disables
them completely, meaning FontEffect=0 as a disable would be superfluous. |
[6] | Albeit one ScriptClub Archive v3 sample uses a Banner effect.
It can’t be from a beta build since style lines do not yet split Outline and Shadows
which according to the progress report was implemented at least 9 days before Banner .
Perhaps a leftover from a downgrade?
(file: Anime/Anime-Sorted/Youre_Under_Arrest/SSA/yua! tv 9-10 v1.0.ssa ) |
[7] | Ironically libass not parsing Comment events at all resulted in a message
about a “not understood” line being logged for each of them until late 2023. |
[8] | Also, some of Sub Station Alpha’s features like the Command event just don't make any sense for softsubs. |