KFX Guide – 02 – The ASS subtitle format

If you would like to contribute to the guide, you can do that at https://github.com/Zahuczky/zahuczkys-kfx-guide/.

In this chapter, you’re going to get introduced to the ASS subtitle format, and every ASS tag.

I will make it clear now, that this is not a full-on “Aegisub guide,” it is assumed that you already know your way around Aegisub, at least in a sense that you can navigate the software.

If you have no experience with the software, google can probably help you with getting going, and you can always ask others for help.
The best place to ask help in is the GoodJob! Media Discord server.
Upon joining, you can ask an admin or a moderator to give you the “Subber role” and with that you can have access to subtitling specific channels. I recommend asking these kind of questions in the #typesetting channel.

With that out of the way, let’s go through how a line is constructed in the ASS format.
You can divide what’s inside a line into two basic parts.
Things that are in {curly brackets} and things that are outside of it.

{This is in the brackets}This is out of the brackets

As you can see, only the text outside the brackets are visible on the video.
We can place formatting tags and comments inside the brackets. 


For total beginner, this tag might be a bit complicated as a first to be introduced to, but kfx-ing is more-or-less based on this tag, and it’ll make understanding the other tags easier later. \t is short for “transform”, as it can be used to transform between two values of one tag. It’s structure is


where 0 is the starting point of the transform, 1000 is the end point of the transform, both in milliseconds(1 second = 1000 milliseconds) relative to the start time of our line, \fs is our tag and 200 is it’s value. In this configuration, it’ll transform the font size of our text to 200 in one second.

You can add acceleration to \t tag by supplying a 3rd argument after the times, like \t(0,1000,1.5\fs200) An acceleration value of “1” will make the transform linear, while numbers above 1 will make it start slow and end fast, and number between 0 and 1 will make it start fast and end slow. Feel free to experiment with it a bit.(this is an order, not a request)

In the above example, the original font size was 100.
Multiple \t tags can be used on a line.


The tag \fs is short for “font size”. It specifies the height of the text in pixels.

It’s argument can be any number, integer or decimal. Be careful though, since fonts can have padding above and below them, so the font might not appear exactly as many pixels as you gave. It’s font dependent.

You can have multiple \fs tags throughout your line, and the text after your tag will be what the tag applies to.

It can be animated by \t, as you can see in the above example. 


\fn specifies the font, or typeface of our text. It cannot be animated by \t.

{\fnArial}Arial {\fnTimes New Roman}Times New Roman

You can have multiple \fn tags throughout your line, and the text after your tag will be affected by it.
Can’t be animated by \t.


“an” is short for “alignment” and it has two use cases. If our line doesn’t a \pos tag(more on that later, but basically if it doesn’t have a defined place on the screen) it defines the placement or our subtitle. Numbers from 1 to 9 can be it’s argument, and they reflect the sides/corners/middle of the screen, with each number representing it’s relative place on a keyboard numpad. In this state they respect margins set in the style, or on the line.


It’s other use case is setting the anchor point of our text, relative to it’s center. The center of a line is… well the center of the text. With the \an tag we can difine the anchor point of our text relative to it’s center, and this point is going to be the one that tags such as \pos or \move use for the coordinates of the line. On the image below, you can see the lines, and their anchor points.

Only one \an tag can be used on one line

Can’t be animated by \t.


“pos” is short for “position,” as it can be used to define the position of the text on the screen, by providing it X and Y coordinates. Coordinates are always relative to the top left of our screen. For example, on a Full HD video(and Full HD subtitle file[which you can set in File->Subtitle Props.{it should always match the video resolution no matter what someone might say}]) \pos(0,0) will make our line appear in the top left, while \pos(1920,1080) will put it in the bottom right.

Only one \pos tag can be used on a line.
Can’t be animated by \t


As it’s name implies, \move can be used to move subtitles around the screen. It’s strucutere is:

{\an5\move(0,540,1920,540,0,2000)}Moving text

where “0,540” are our starting coordinates, “1920,540” are our ending coordinates, and “0,2000” is our starting and ending time of the movement in milliseconds.
So \move with these arguments will move the text from 0,540 to 1920,540 in two seconds, starting from the beginning of the line.

A \move tag can’t have acceleration, and only one can be used on a line.

I wouldn’t think it’s worth mentioning, but for the sake of completeness, no, it can’t be animated by \t.

(For multi-step/non-linear movement you can use shadow tags(\shad\xshad\yshad), more on those later)

\bord<num>, \xbord<num>, \ybord<num>


\shad<num>, \xshad<num>, \yshad<num>,


\blur<num>, \be<num>,


\fscx<num>, \fscy<num>,


\blur<num>, \be<num>,




\frx<num>, \fry<num>, \frz<num>,


\fax<num>, \fay<num>,


\c<colorCode>, \1c<colorCode>, \2c<colorCode>, \3c<colorCode>, \4c<colorCode>,


\alpha<HEX>, \1a<HEX>, \2a<HEX>, \3a<HEX>, \4a<HEX>,




\fad(<fadein>,<fadeout>), \fade


\clip, \iclip




Writers/contributors: Zahuczky