Dynamic text styling lets a column in your data change the font, the reading direction and the justification of a text layer, one row at a time. You add a second column named after the text layer plus “@style”, fill it with a short piece of JSON, and Templater applies those choices when it imports the words. It needs Templater 3.4 or later.
One correction before anything else, because the title of this piece promises more than the feature delivers. The styling applies to a whole text layer. It does not restyle individual words inside one layer. A single text layer in After Effects uses one font, one size, one weight and one style, and our FAQ says so plainly. What dynamic text styling gives you is a layer that can change its font and direction from row to row. That matters most when your rows are in different languages, and it is the reason the feature exists. This article walks through how the column works, what each property does, what Templater does when the data is incomplete, and what to do when you really do need two styles in one line.
How the @style column works
Start with the usual setup. You have a text layer in your template, and you have mapped it to a column header in a spreadsheet or to a property key in a JSON file. Say the layer is mapped to a column called description. Each row carries different words, and Templater drops them into the layer.
To style that layer from the data, you create one more column called description@style. The rule from our documentation is simple. The header or the key must be the text layer name followed by “@style.” A layer called title uses title@style. A layer called description uses description@style. You make one such column or JSON object for each dynamic text layer you want to style, and you leave the other layers alone.
The cells in that column hold small pieces of JSON. For a font alone, the syntax is the key “font-face” with a value that is the PostScript name of the font. Our documentation uses Arial as the example, and the PostScript name there is ArialMT, so the cell reads {“font-face”:”ArialMT”}.
That PostScript name is where people stumble first. The name you see in a font menu is the common name, also called the display name. The name Templater wants is different. You can find it without leaving the application. Open the Text Settings tab in the Templater Preferences dialog, search for the common name of the font, and the results box lists the PostScript names of the installed fonts that match. Copy from there instead of typing the name from memory.
Once the column exists, you connect the data source to the composition as you normally would. The documentation adds one practical note. You can still use the regular After Effects controls to style the other parts of the text layer. The @style column handles the properties listed below. Everything else, such as size or fill, stays in After Effects where you set it.
The three properties that work today
The documentation lists three supported properties: font-face, direction and justification. Justification requires Templater 3.4.1 or later. That list is short on purpose, and we would rather you know it now than discover it after building a sheet around a property that is not there. Size, color and weight are not on the list.
Font-face picks the font. Direction sets whether the paragraph reads left to right or right to left, and the two values are LTR and RTL. Direction applies to the content of the paragraph, based on the language it is written in, and many Middle Eastern languages read right to left. Justification controls how the paragraph aligns inside its text box. Left, right and center are the common choices, and After Effects also offers full, full-left, full-right and full-center.
You can set one property per cell, or combine them. A combined cell looks like this: {“font-face”:”ArialMT”,”direction”:”LTR”}. A Hebrew row from our documentation reads {“font-face”:”NotoSansHebrew-Medium”,”direction”:”RTL”,”justification”:”right”}. Notice that the Hebrew example sets all three. The next sections explain why that matters.
A worked scenario: one template, three languages
Picture a promo template with a headline layer called title and a subtitle layer called description. Your sheet has three rows. Row one is English. Row two is Hebrew. Row three is English again, but the product name has to appear in a different font for that market.
You add two columns, title@style and description@style, next to the content columns. For the English rows you fill in the font and set the direction to LTR. For the Hebrew row you choose a font that is installed on the machine and supports Hebrew, set direction to RTL, and set justification to right. When Templater reaches row two, it imports the Hebrew words with that font, that direction and that alignment. When it moves on to row three, the styling changes back, because the styling came from the row and not from the template.
That row-by-row behavior is the point. With an @style column, one template can change its font, direction and alignment from row to row. If you are weighing how to organize multilingual output, our guide on using Templater for localization covers the wider workflow, and the piece on handling right-to-left languages in a left-to-right video goes into the layout side of the same problem.
Our documentation has a mixed-language note that is worth repeating with its condition attached. In After Effects 2024, you can have mixed languages in the same text element. The example it gives is a subtitle in Middle Eastern characters that includes the name of a book written in Latin characters. This is about languages sharing a text element. It is not about giving two words two different fonts. As we read it, the font still comes from the one font-face value on that layer, so our advice is to choose a font that covers every script in the line.
Why the font has to be installed and has to cover the language
Our docs give the same advice twice, so it is worth taking seriously. For best results, always use a font that is installed on your system and that supports any languages used in your dynamic text layers. The product page says it in a plainer way. Insert characters from any language into your spreadsheet and they appear in your text layers, as long as the installed fonts have the glyphs you require.
The documentation then describes what happens in each failure case, and the outcomes are not equally forgiving.
If you name a font that is installed, Templater imports the text and uses that font. This is the case you want.
If you name a font that is not installed, the result depends on the operating system. On Windows, Templater uses the System Default Font. On macOS, the documentation says the result is unexpected. That is an honest phrase, and it means you should not rely on any particular outcome. The fix is to install the font on every machine that renders.
If you name a font that is installed but does not support the language of the text, Templater does not import the text. Nothing appears in the composition for that row or object. This is the failure that looks most like a bug. The row renders and the layer is empty. When a language row comes out blank, check the font before you check anything else.
If you leave the @style cell blank for a text element, Templater imports the text and renders it with the default values in Templater Preferences. If you leave the font value empty, as in “font-face”:””, it also imports the text and uses the default font from Preferences. The same fallback applies when a spreadsheet has no entry on every line of the @style column, which is a normal thing to happen when only some rows need special treatment.
That last point is useful in practice. You do not have to fill in the column for the rows that are fine with your default. You fill in the rows that differ, and the rest fall back. Just make sure the default font in your Preferences is a sensible one, because every blank cell will land on it.
Direction and justification: the rules that need care
Direction is the easier of the two. If you leave the @style cell blank, Templater uses the Preferences defaults. If you include a direction key with an empty value, as in “direction”:””, Templater imports the text and uses left to right as the default direction.
Justification is where the documentation spends most of its words, and with good reason. Direction and justification usually go together. Right-to-left text usually aligns right, and left-to-right text usually aligns left. Because they usually match, After Effects does not support some combinations that look reasonable on paper.
Our documentation therefore gives a direct recommendation. If you use this feature with both left-to-right and right-to-left languages, set the values for direction and justification explicitly in each JSON object or row of your data source. Do not leave them to chance. That is why the Hebrew example above sets all three properties.
If you leave justification empty, as in {“justification”:””}, Templater matches the justification to the direction. LTR becomes left-justified and RTL becomes right-justified. That fallback is sensible, and for many rows it is the result you want.
The fully supported combinations in our table are these. LTR with left. RTL with right. Either direction with center. Either direction with full. Either direction with full-center. LTR with full-left. LTR with full-right. In each of these, Templater imports the text and fully supports the settings.
Three combinations are the exceptions, and they are the ones to avoid. RTL with left is an edge case After Effects does not support, so Templater imports the text and matches the justification to the direction, which means it comes out right-justified. RTL with full-left behaves the same way. RTL with full-right is a slightly different edge case. Templater imports the text and justifies it to the right, but not full-right. The settings table also marks left, full-left and full-right as not supported for RTL languages, so if you build a sheet by hand, keep right-to-left rows to right, center, full and full-center.
One more sentence from the documentation deserves attention. The justification property affects only the alignment of the text. If you set it to support a right-to-left language, you must also set direction and font-face. Justification alone does not turn a row into a right-to-left row. It only moves the paragraph in its box.
A practical checklist for a multilingual sheet
Build it in an order that catches mistakes early. First, confirm the version, since justification needs Templater 3.4.1 or later and the whole feature needs 3.4. Second, name the style columns after the layers exactly, with @style on the end. Third, look up PostScript names in the Text Settings tab of the preferences dialog and paste them in. Fourth, for every right-to-left row, fill in font-face, direction and justification together. Fifth, install every font on every render machine. Sixth, preview one row for each language before you run the batch, and look at the empty cases, because a blank layer is how a font problem announces itself.
If your data lives in a Google Sheet, our reference on using Templater with Google Sheets explains how columns map to layers. The @style column is an ordinary column in the sheet, so it sits beside the columns you already map. For fixed layouts where translated text runs longer than the original, see managing text expansion across languages.
Where this stops, and what to do instead
The limit is plain. One text layer takes one font, one size, one weight and one style. Our FAQ answers the common question directly. You cannot mark up the text data so one layer shows some words in bold and others in italics. Dynamic text styling does not change that. It changes the style of the whole layer per row, and it does not reach inside the line.
If you need a bold first name followed by a light last name, you have a partial workaround, and we call it partial because it is. Use two text layers and give each its own attributes. Then use the layer Attachment properties to position them next to each other. That is a layout feature and not a styling feature, and it is covered in our piece on automating design with layout rules. In our view it suits short phrases. It does not give you true inline styling, so a long paragraph with a bold word in the middle is not a good fit for this approach.
There are also properties the @style column does not cover. If your design needs the font size or the color to change from row to row, the documented list of font-face, direction and justification does not include them. Check the current help pages before you plan around a property we have not listed here. Our article on text style expressions in After Effects is the place to look for a different approach to styling.
If you only ever render one language in one font, skip the @style column. It adds a column to maintain and a place for a typo to hide. The feature earns its place when your rows differ in script, direction or alignment, or when different markets want different fonts. The Templater page shows how this fits with the rest of the product, and the learn section collects the how-to material in one place. The Templater help pages also cover this feature step by step at support.dataclay.com.
The bottom line
Add a column called layername@style, put a small JSON object in each row that needs special treatment, and let Templater apply the font, the direction and the justification as it imports each row. Use a font that is installed everywhere you render and that covers the language. For right-to-left rows, always set all three properties. And be clear about what the feature is. It restyles a whole layer per row. It does not restyle words inside one layer, and for that you need two layers side by side.
For a multilingual template, that is a good trade. One file, one sheet, many scripts.
If your sheet has questions the article did not answer, the ones below are the most common.
Frequently Asked Questions
People ask us these when they first try the @style column on a real sheet.
Can I make one word bold inside a text layer with the @style column?
No. The @style column controls font-face, direction and justification for the whole layer, and a single text layer must use the same font, size, weight and style throughout. You cannot mix bold and italic words in one layer. A partial workaround is to use two text layers, give each its own attributes, and position them next to each other with the layer Attachment properties.
What do I name the column?
Use the name of the data column or property key that the text layer is mapped to, followed by @style. If the layer is mapped to description, the style column is description@style. If the layer is called title, the column is title@style. In a JSON data source, the property key follows the same pattern. Make one such column or object for each dynamic text layer you want to style.
How do I find the PostScript name of a font?
Open the Templater Preferences dialog and go to the Text Settings tab. Search for the common name of the font, also called the display name, and the results box shows the PostScript names of the installed fonts that match. For Arial, the PostScript name used in our example is ArialMT. Copy the name from the results and paste it into your @style cell instead of typing it from memory.
Why does a row come out with no text at all?
The most likely cause is a font that is installed but does not support the language of the text. In that case Templater does not import the text, and nothing appears in the composition for that row. Switch to a font that has the glyphs the language needs, such as one built for Hebrew when the row is Hebrew, and make sure it is installed on the machine that renders.
What happens if I leave an @style cell empty?
Templater imports the text and renders it with the default values in Templater Preferences. If the cell holds a font-face with an empty value, it uses the default font from Preferences. If a direction value is empty, it uses left to right. This means you only need to fill in the rows that differ from your default, as long as the default in your Preferences is a font you are happy to see.
Do I have to set direction and justification together for Arabic or Hebrew?
We strongly recommend it when your sheet mixes left-to-right and right-to-left languages. Set direction and justification explicitly in each row or JSON object. Justification only moves the paragraph in its box, so a right-to-left row also needs direction and font-face. Avoid left, full-left and full-right for RTL rows, because After Effects does not support those combinations and Templater falls back to matching the direction.
Which Templater version do I need?
Dynamic text styling is supported in Templater 3.4 or later. The justification property needs Templater 3.4.1 or later. If you are on an earlier release, the @style column will not do what this article describes, so update before you build a sheet around it. The mixed-language behavior inside one text element is documented for After Effects 2024.