Live sports data reaches an After Effects graphic through layer names. Each changing piece of the graphic, a player name, a score, a team color, is one layer with one name, and that name matches one column in your data. Get that mapping right and the rest of the work is checking edge cases before game night.
This page is about the After Effects side of the job. If you are still deciding how stats get from a scoring system into a sheet, and how long each hop takes, we cover that in our post on getting feed stats into a lower-third before the next break. Here we assume the numbers will arrive somehow, and ask what your composition has to look like so they land cleanly. We build Templater, an After Effects plugin, so the examples use it. Where our documentation is silent on a detail, we say so instead of guessing.
What live means once the data is inside After Effects
Start with the honest definition, because it shapes every design choice that follows. Templater applies data to a master composition and produces a video file. The graphic is true at the moment its render starts. It does not keep updating while it sits on screen. A running score or a game clock that must change every few seconds belongs in a real-time graphics engine. Graphics that are true at a moment and then replaced fit the After Effects approach well. Think of leaders after a quarter, a starting lineup, a player card after a substitution, a final box score line.
That definition has a practical consequence for the designer. You are not building a graphic that reacts. You are building a template that gets filled in, rendered and replaced, so the work is deciding which parts are fixed and which parts are fillable. Everything fixed stays as ordinary After Effects artwork that your team already knows how to make. Everything fillable becomes a dynamic layer.
Here is the example we will use for the rest of this page. It is hypothetical. A regional youth basketball league streams its Saturday games, and its one motion designer owns a post-play player card. The card shows a headshot, a name, a jersey number, three stat lines, a team logo and a team color bar. She wants the card to be built once and filled for any player on any roster. Nothing about this league is real, and every name and number below is invented to show the mechanics.
Her first decision is which composition does the work. Templater needs a target composition, the one it processes. Our documentation lists three ways to set it. The data source can name one in a target column, which overrides everything else, though you then have to set one of the other two methods as a backup, and we recommend setting it from the project. The Preferences dialog can hold one fixed name, which suits a single composition but errors if you open a project file that does not contain that name. Or you can wrap the composition name in double braces or double brackets inside the project itself, which stores the choice in the file. For a one-card template, the project method is the least likely to surprise you on game night, because the choice travels with the project. If two compositions in one project use that notation, you get unexpected behavior, so mark only one.
Next, she decides what is dynamic. As of Templater 2.8, the layer types that can be marked dynamic are text, solid, footage, pre-composition, adjustment and JSON. You mark a layer dynamic by applying the Templater Settings effect to it. Shape layers cannot take the effect. Team color bars, stat bars and score plates are often built as shape layers, so it is worth knowing before you build. The documented fix is to pre-compose the shape and apply the effect to the pre-composition. A color bar can live in its own small composition with the effect on the pre-composition. If the bar is a solid, you can apply the effect directly and skip the pre-composition.
Apply the effect once per layer. Our documentation warns that applying it twice produces unexpected results, and the habit worth building is to check the effect stack on any layer before you add it again. In a card with a dozen dynamic layers, a stray second copy is easy to create while copying layers between compositions.
Name the layers, build the columns, and decide what a cell holds
Mapping is the heart of the job, and it is where most silent failures start. Each dynamic layer needs a unique name that matches a column header, or a property key if your data is JSON. Our example text layer for an introductory title is called introTitle, and the data source then carries a column called introTitle. For the player card, she names the layers playerName, jerseyNumber, statOne, statTwo, statThree, teamLogo, teamColor and headshot, and she builds a sheet with exactly those headers.
Two rules from our documentation deserve underlining. You must explicitly rename every dynamic layer, even when the name After Effects gave it already matches the column. If you skip the rename, Templater may not treat the layer as dynamic, and nothing tells you. And avoid spaces in layer names. We also advise names you will recognize later, because you will type the matching headers by hand. A layer called Text 14 will cost you time the first time someone else opens the project.
The next question is what a cell can hold. Our data source page says the cells in each column contain text, URLs, image file paths or hex color values. That list is short, and it tells you how to plan the card.
Text cells are the easy part. The player name, the jersey number and the stat lines are all text, and Templater reads them as they appear in the sheet. Tab-separated and JSON text files must be UTF-8 encoded so Templater can read international characters. If your league has players whose names use accented letters, check that your font supports them before the first game, because a font that lacks a glyph gives a bad result at the worst time. If you ever need to change the font or text direction for particular rows, Templater supports a style column that sits beside the text column, named with the text column’s header followed by @style. That feature needs Templater 3.4 or later, and it covers font face, direction and justification. For a one-language league you may never touch it. We cover the mechanics in our post on dynamic text styling.
Image cells are paths. The headshot and the team logo are footage layers, and the cell holds a file path. Our footage folder documentation is specific here. You create one folder for each After Effects project configured for Templater, with subfolders for audio, images and video, and you set that folder in the Batch Assets section of the Templater panel. Every footage path in the data source must be relative to that folder. So a cell reading images/headshots/p114.png works, and a full path from your own desktop does not travel to another machine. This is the failure that bites when a second operator opens the project on a different computer. If a headshot is missing on game night, the behavior depends on your preferences, and our post on missing and remote footage explains the options. The general practice for a sports team is to keep a default placeholder image for every player slot, so a late roster addition shows a neutral silhouette and not a hole.
Color cells are hex values. Our data source page lists hex values as something a cell can hold, so a team color can live in the sheet as a hex code. Check our Dynamic Color documentation for which layer or property receives it before you build the bar around it. The aim is a card with no separate version for each team, so a new team is a row of data and not one more template. Keep the color in the team table and not in the player row if you can, so a rebrand is a one-cell change.
That last point leads to the sheet design, which is a data question and a design question at once. A player card needs per-player fields, such as name, number, stats and headshot, and per-team fields, such as logo and color. The simplest sheet repeats the team fields on every player row, which is easy to read and easy to break when someone edits one row and forgets the others. The tidier approach is a roster sheet that is built once per game. We walk through that setup in our post on building a roster sheet that drives every game’s player graphics. Our advice for the After Effects side is narrower. Whatever the sheet looks like, the headers must match your layer names character for character, and the sheet must be one tab. Templater maps to a single worksheet within a Google Sheet and works from one data source, so if your stats live on three tabs, one of them has to become the tab that drives the card.
Each row in the sheet is one render job. That is worth saying twice, because it changes how you think about the card. The sheet is not a place where the card is described. It is a list of cards. Row one is a card, row two is another card, and a roster of twelve players is twelve rows and twelve cards.
Let the numbers drive the design: expressions, attachments and layout
Plain text replacement gets you far, but sports graphics usually want the numbers to move something. A stat bar grows with the points scored. A badge appears only when a player leads the team. After Effects expressions can read Templater’s data for exactly this, and our documentation gives two routes.
The route we recommend is to reference the Source Text property of a dynamic text layer. You reveal the text layer’s Source Text property, then use the pickwhip in the property you want to control, and the expression reads the value the layer holds for the current row. One detail matters a great deal. All Templater data is interpreted as strings. The text “18” is not a number to After Effects until you convert it. Our documentation lists parseInt to cast a string as an integer, parseFloat for a decimal, parseNumber to let the code decide which it needs, and eval for an object or an array. So a stat bar for points reads the pts text, casts it to a number, and scales the bar from it. The cast is a one-line job, and forgetting it produces a bar that does not move or a result that looks like text pasted together.
The second route is Templater’s JSON footage layer. With the right preference enabled, Templater writes the data for the current job into a JSON file, imports it into the project, and you reference its parameters from expressions. We include it for completeness, and we flag the catch plainly. Our documentation calls mapping data to expressions this way an experimental feature. A dialog in After Effects can require a click when the structure of imported JSON footage changes, which can interfere with a batch. And previews that use this route do not automatically update, though rendering should use the right data. For a card that has to run unattended, the Source Text route is the more stable one. We go deeper on both in our post on using Templater data in expressions.
Be careful about how much logic you put in expressions. A bar that scales from a number is a good use. A tangle of conditions that decides eight different layouts is a template nobody else can maintain, and a template that only its author can edit is a risk to a league that depends on it every weekend. If the logic grows past a few lines, move it into the data instead. A column that holds the finished label for a badge, filled in when the sheet is built, is easier to inspect than an expression that works the label out.
If you already own pre-built templates, one more option is worth knowing. Dynamic Essential Properties, available from Templater 3.5, let data change values that a template author promoted to the Essential Properties panel. That supports pre-built templates, including Adobe Motion Graphics Templates. The pre-composition layer must carry the Templater Settings effect, and your data keys must match the property names exactly, including any group names. Our documentation is candid about the limit. Features like Time Sculpting affect more than a single layer, so this route cannot do everything the standard layer mapping does. For a league that built its card from scratch, standard mapping is the better fit. For a designer working from a template bought elsewhere, this is the shortcut.
Now return to the awkward rows. Real rosters include a player whose surname fills the whole name plate, and a team called something with four words. A card sized for the average name breaks on one of these. Layout rules, set per layer inside the Templater Settings effect, handle it. Scale Factor rescales a layer to a percentage of its parent composition. Alignment controls pin a layer to a side or a corner. You can add pixel padding, and you can measure from the anchor point instead of the bounding box. One limit belongs in your notes. Layout rules do not work correctly on a layer property that has Separate Dimensions turned on.
For things that should travel with a changing name, attachment is the tool. Our post on making a graphic follow a changing text layer covers the controls in full. In the player card, the jersey number badge attaches to the right edge of the name, so a short name puts it close and a long name pushes it out, with padding so it never touches the last letter. The graphic does not become dynamic. It becomes aware of its neighbor. If a graphic jumps somewhere strange, check the Attach to Layer field first, because a layer cannot be attached to itself and.
Timing has a counterpart. Time Sculpting uses time-based rules to crop, trim, shift and stretch layers, and our documentation describes it as a way to account for differences in source durations, such as a clip that is longer or shorter than the slot reserved for it. It matters if your card includes a short video clip, such as a highlight under the stats. Set these rules when you rig the template, since hunting for them after a render looks wrong is slower.
Preview with ugly rows before any game, and what to check
The cheapest place to find a problem is the preview, and Templater’s preview is built for it. In manual mode, Templater reads the data source and updates every dynamic layer with the data from a row. You step between rows with the transport controls, and you can limit the range so the preview stays fast. Our documentation points out that Templater re-reads the data source each time you preview and does not cache it, so an edit you just made in the sheet shows up on the next step. Cycle mode is different. Templater reads the data source once, then cycles through the range automatically. Rows you add or change after cycling starts will not appear until you start again, which is worth knowing if you are editing the sheet and watching the cycle at the same time.
Preview Modes
Manual mode vs cycle mode for checking data
- When is the data source re-read?
- Manual modeRe-reads every time you preview; does not cache
- Cycle modeReads the data source once before the cycle begins
- Do new rows appear immediately?
- Manual modeYes, an edit you just made shows up on the next step
- Cycle modeNo, rows added after cycling starts will not appear until you restart
- Best use
- Manual modeEditing the sheet while checking the card
- Cycle modeStepping through a fixed range automatically
If you are editing the sheet while checking the card, use manual mode and a small row range so each step stays fast.
The preview also has a setting that decides what you are really looking at. Our setup walkthrough notes that to see how the layout engine reads your choices, the Preview uses menu should be set to current state. A menu left on the wrong value is a quiet way to convince yourself the layout is fine. Our post on preview modes and spot checks goes through the options in order.
Here is a checking routine for the player card, again a hypothetical one, built for the way a league actually fails. She does not preview the first three rows, which are the starters and look fine. She builds a test sheet of the rows that scare her, and previews those. The longest name in the league. A player with a hyphenated surname. A two-digit jersey number next to a single-digit one. A stat of zero, because an empty bar looks like a broken bar. A stat higher than any she has seen, to find where the bar leaves the frame. A blank headshot cell. A team color that is nearly the same as the card background. Seven rows, and each tests one assumption.
Every one of these checks comes from a general rule. The average row proves nothing, and the rows at the edges of your data prove everything. A sheet of three hundred ordinary names will not reveal the one outlier that breaks the design, and a designer who tests only ordinary rows finds the outlier on air.
Pre-Game Preview Checks
Seven test rows to preview before the first game
- Preview the longest name in the league
- Preview a player with a hyphenated surname
- Preview a two-digit jersey number next to a single-digit one
- Preview a stat of zero, because an empty bar looks like a broken bar
- Preview a stat higher than any you have seen, to find where the bar leaves the frame
- Preview a blank headshot cell
- Preview a team color that is nearly the same as the card background
After the preview comes the question of volume, which is about editions rather than layers. Our documentation describes Rig as the edition that prepares a project, maps data to layers and previews the result. Pro adds batch rendering and replicating. Bot adds the fully automated background workflow, which checks the data source periodically and renders rows marked ready. A perpetual Rig license can also be paired with the Que Meter, which tracks credits for outputs. You can do everything in this page with Rig. Rendering a whole roster at once needs Pro, Bot, or Rig with Que Meter credits. For a league that renders a handful of cards per game, that decision is a business question for the person who owns the budget. We walk through the differences in our overview of what Templater is, and the product details live on our Templater page.
Before you trust the template, keep it light. A player card has few layers by nature, so it is easy to delete what the card does not use before game night. If you run Templater Bot on a machine that stays on, our post on optimizing After Effects for the Templater Bot covers the cache settings that keep it fast.
One last habit. Save a copy of the project and the test sheet together after every layout change. When a coach complains that a card looked wrong on Saturday, you want the exact sheet row and the exact project that produced it, and a labeled pair of files answers that question in a minute.
The bottom line is short. The After Effects side of a sports graphic is a naming exercise followed by an edge-case hunt. Name each changing layer to match a column, put paths, colors and text in the cells that match them, let attachments and layout rules absorb the long names, and preview the worst rows you can find before the first game. A designer who does that can hand the sheet to someone else on game night. What this approach will not do is update a graphic while it is on screen. If your running score has to tick, give that element to a real-time engine and keep the template for the graphics that are true at a moment, then replaced.
We covered the build from the layer outward. Here are the questions designers ask us most when they take on this kind of template.
Frequently Asked Questions
Why is my dynamic layer not changing when the data does?
Check the name first. Our documentation says each dynamic layer must be explicitly renamed after you create it, even when the name After Effects gave it matches the column, or Templater may not treat it as dynamic. Then check that the Templater Settings effect was applied once, that the layer name has no spaces, and that the header in your sheet matches the layer name exactly. Those four checks cover the common causes.
Can a shape layer receive data?
Not directly. The Templater Settings effect cannot be applied to shape layers. Pre-compose the shape, then apply the effect to the pre-composition. Text, solid, footage, pre-composition, adjustment and JSON layers can all be dynamic as of Templater 2.8. If a team color bar is a simple fill, using a solid instead of a shape also works.
How do I make a stat bar grow with a number from the sheet?
Map the stat to a dynamic text layer, then use a pickwhip on the bar’s scale property to reference that text layer’s Source Text. Templater passes every value as a string, so cast it to a number in the expression with parseInt, parseFloat or parseNumber. We recommend the Source Text route over the JSON footage route, which our documentation calls experimental and which can show a dialog that interrupts a batch.
Where do headshots and logos come from, and why are my paths failing?
They come from the footage folder you set in the Batch Assets section of the Templater panel. Every footage path in your data must be relative to that folder, so a path copied from your own desktop will not work on another machine. Keep audio, images and video in subfolders of one folder per project. A relative path is what lets a second operator open the project and render the same card.
Does a long player name break the card?
It will if the card was sized for an average name. Rig layout rules so the plate resizes and neighbors follow, and attach secondary graphics like a number badge to the name layer. Then prove it by previewing the longest name in your data. One caution from our documentation is that layout rules do not work on properties with Separate Dimensions enabled.
Does the preview show new rows I just added to the sheet?
In manual mode, yes. Templater re-reads the data source every time you preview and does not cache. In cycle mode, no. Templater reads the data once before the cycle begins, so rows you add or change afterward will not show until you restart it. If you are editing the sheet while checking the card, use manual mode and a small row range so each step stays fast.
Do I need Pro or Bot to build this?
No. Rig prepares the project, maps data to layers and previews the result, which covers everything on this page. You need Pro, Bot, or Rig paired with Que Meter credits to produce files in bulk. Bot is the edition that checks your data source periodically and renders rows on its own. Which one fits depends on how many cards you render per game, so count that before you buy.
