Teams that automate player graphics for every game keep one roster sheet that stays true all season, build one row per graphic from it, and let Templater turn each row into a finished lineup card, player of the game post or milestone graphic. The template matters, but the sheet is what decides whether the system survives a whole season. Most of the trouble we see comes from a sheet that was built for one game and then asked to run thirty.
This article is for the people who actually make the posts: the social coordinator, the club’s one designer, the media intern who gets handed the roster on a Thursday. It is about how to shape the sheet, how to handle graphics that show more than one player, and who on a small staff touches what during a game week. If you want the wider production picture, including highlight cuts, stream graphics and delivery, our article on how Templater automates sports video production covers it, and the DraftKings story shows what it looks like when a non-design team fills the sheet. We will not repeat either here.
The rule that shapes everything: one row is one graphic
In a Templater data source, each row of a spreadsheet, or each object in a JSON file, becomes one render job. Each column feeds one dynamic layer in the After Effects composition. That sounds obvious until you try to make a starting lineup.
A roster has one row per player. A lineup graphic shows five players, or eleven, or however many your sport starts, in one image. If you point the lineup template at the roster, Templater will try to make one lineup per player, each with one name in it. That is the first wall most teams hit, and the fix is a change in how you think about the sheet, not a setting.
Separate two things. The roster is reference data: who is on the team, their number, their position, where their headshot lives. The job sheet is a list of graphics you want made: tonight’s lineup, tonight’s player of the game, the milestone card for a player who just reached a career mark. A player graphic is one row that names one player. A lineup is one row that names every starter, with a column for each slot.
For a five-player lineup that means columns for each starter’s name, number and photo. The designer builds the lineup composition with a matching layer for every slot, each one renamed to match its column exactly. Our documentation is strict here. A layer has to be explicitly renamed after you create it, even if its name already looks right, or Templater may not treat it as dynamic. Layer names should not contain spaces.
The column names have their own rule, and it bites sports teams in particular. For Google Sheets, Templater does not support column headers that begin with a numeral, contain spaces, or contain the _ character. A header like 1_name or starter 1 will not map. So the instinct to number the slots has to be bent a little. Headers such as starterAname, starterAnumber and starterAphoto work, as do s1name and s1photo, because the numeral is not first and there is no _ character and no space. Pick one pattern on day one and never change it, because every slot layer in the template is named after it.
There is a second constraint to plan around. Templater maps data from one worksheet in one data source. It cannot read the roster tab and the job tab at the same time. So the worksheet Templater reads has to carry everything the graphic needs: the names, the numbers and the photo paths, not just a player ID. Many teams keep the roster on its own tab anyway and fill the job worksheet from it with the spreadsheet’s own lookup formulas, so a coordinator types a jersey number and the name and photo path appear beside it. If you do this, preview a few rows before you trust it, so you know the values Templater receives are the ones you see. And keep formulas out of the render-status column. When the Bot updates that column, it replaces any formula in the cell with the formula’s result.
If your data lives in JSON or in QUE instead of a sheet, the same thinking applies with object keys instead of column headers. One more option opens up there. With Dynamic Essential Properties, available in Templater 3.5 and later, a designer can build a single player card as a primary composition, place it in the lineup five times as separately named pre-comp layers, and drive each instance’s promoted properties from data. Our documentation shows the setup with JSON keys that join the layer name and the property name. It also warns that features which reach across layers, such as Time Sculpting, cannot be changed this way. For a still lineup card that is rarely a problem. Our post on dynamic essential properties in Templater covers the details.
Building a sheet that lasts a season
A good job sheet reads like a checklist of what the graphic needs and what the system needs. Here is the shape we suggest for a club’s player graphics, with the reason for each part. Treat it as a starting point, not a standard.
Identity columns. First name and last name in separate columns, not one. Designers often style a surname larger than a first name, and they cannot do that if both arrive in one cell. The jersey number and position get their own columns too. Layout rules in the template handle the length problem, scaling and repositioning a layer when its content changes, but only if the designer set them with your longest surname in mind.
Photo columns. Headshots and action photos are footage. A cell can hold a file path relative to the Footage folder you set in the Templater panel, where our documentation suggests keeping subfolders for images, video and audio. If your photographer delivers to Google Drive, Templater 3.7.2 and later can use Drive share links as footage references through the Media Connector for Google Drive, and you can mix local paths and Drive links in the same sheet. Agree a file naming convention with whoever shoots the headshots, such as number and surname, so the coordinator can type a path without hunting for it.
Color columns. Cells can carry hex color values, and a color can drive a dynamic layer. That is how one template becomes a home card and an away card, or picks up the opponent’s color for a matchup graphic, without a second project.
Which graphic to make. If your lineup card, player of the game card and milestone card live in one After Effects project, a target column tells Templater which composition to render for each row. One sheet, one project, many graphic types. Our documentation asks you to keep a backup method for the target as well, set in the project, so a blank cell does not stop the job. If the designs live in separate project files, an aep column switches projects per row using full file paths. Those projects must open cleanly. A missing font or effect halts the process, which is a good reason to install the club’s fonts on every machine that renders.
Switches. Some layers should appear only sometimes: a captain’s armband, a milestone ribbon, a “debut” tag. Templater’s flags handle this from the sheet. Putting in a cell hides that dynamic layer for that row. Mapping a composition layer to a cell that holds another composition’s name in double braces swaps the layer for that composition, which lets a designer offer a few celebration animations and have the coordinator pick one by name. Flags are case-sensitive, so copy them exactly. Our post on using flags in data sources walks through each one.
The file name. Add an output column and fill it with a formula that joins the date, the graphic type and the player’s surname. That value names the file, and it overrides any id column. A folder of files named for what they are saves the social team from opening each one to find the right post. Our article on custom output file names shows the formula approach. Make sure every row’s name is unique, because the Bot overwrites an existing file that has the same name.
The status column. If you run Templater Bot, add a render-status column. Typing ready in it is how a person tells the machine to make that graphic, and the Bot writes back queued, processing and done as it works. That column becomes the staff’s shared view of what exists and what is still waiting.
Missing photos deserve a decision before the first game, not during it. Templater can skip a row whose footage cannot be found, stop and ask, or drop in a branded placeholder. Since version 2.9.5 the branded placeholder is the default, and our documentation recommends it for batches because it keeps the run moving. For a club, the honest version of that placeholder is the crest on a team-color background, so a missing headshot looks intentional rather than broken. Our post on handling missing and remote footage covers the settings.
If your staff already lives in Google Sheets, our complete reference for Templater and Google Sheets covers the connection itself.
A game week on a small staff
Here is how the sheet and the people fit together over a week. This is an illustrative scenario we built from the documented behavior, not a customer account. Picture a college soccer program with a two-person social team, a part-time designer and a student photographer.
Before the season. The designer builds three compositions in one project: a lineup card with eleven slot layers, a player of the game card and a milestone card. They load the roster with the longest surname, the player with two first names and a goalkeeper photo cropped differently from the rest, then preview a range of rows to watch the layout rules handle each one. The photographer shoots headshots and names the files by number and surname. The coordinator builds the roster tab and the job worksheet, and the team renders a full set of player introduction cards for the opening week. Before that big first batch, they look at spot checks, which are stills of chosen frames from every job, so one person can scan the whole roster in a few minutes.
Early in the week. The coordinator adds the opponent, date and colors to the upcoming rows. Nothing is marked ready yet. Rows can sit in the sheet half-filled for days without anything rendering, because the Bot only acts on rows marked ready.
Game day. When the coaching staff confirms the starters, the coordinator types eleven jersey numbers into the lineup row, checks the names that the lookups fill in, and marks the row ready. With Bot running on the club’s render machine, the Bot checks a Google Sheet at an interval no shorter than about eighteen seconds, picks the row up, and renders the card while the coordinator is already writing the caption. A late scratch in warm-ups is one changed number and one more ready.
After the final whistle. Somebody decides who the player of the game is. That is a judgment, and no sheet makes it for you. Once it is made, it is a single row: the player’s number, the target set to the player of the game composition, the opponent’s color, and the stat line the team wants to show. Milestone cards work the same way, and the flag keeps the milestone ribbon hidden on rows that are not milestones.
The next morning. The coordinator scans the status column. Everything says done, or it says an error code that tells them where to look. The files are already named for what they are.
Notice who did what. The designer worked before the season and again only when the design changed. The coordinator worked in the sheet. The photographer kept the headshot folder current. The people judging the game made the calls only people can make. Nobody opened After Effects on game day.
That last part depends on the edition. Templater Bot is what lets rows render on their own as they are marked ready. A staff that is happy to sit down after the game and render a range of rows with one click can do that with Templater Pro, and the designer who builds and previews templates can work in Templater Rig. Our licensing guide maps the editions, and the Templater page has the current details.
The mistakes that show up in week six
A system that works for the opener can fail later for reasons nobody saw in testing. These are the ones we would plan for.
A new signing or a call-up arrives with a name longer than anyone on the original roster. If the layout rules were set for the old longest name, the new one can overflow. Re-preview with the new player before their first appearance, not after.
Someone adds a column with a _ character or a space in its header because it reads nicely. It silently does not map, and the layer shows its old value. Keep a short note at the top of the sheet with the naming pattern.
Two graphics share a file name, usually because the date was left out of the output formula, and the second one overwrites the first. Put the date in every output name.
A designer adds a layer for a new sponsor badge and forgets to rename it explicitly, so it never changes. Every new dynamic layer needs a fresh, deliberate name that matches its column.
A second project file is added for playoff designs, and the playoff font is installed on the designer’s machine but not on the render machine. A project that cannot open cleanly stops the run. Install fonts on the render machine first.
When this is the wrong approach
If your team makes a handful of graphics a season, a template and a sheet are more setup than the work deserves. The payback comes from repetition, and a club that posts one lineup a month may be better off designing it by hand.
If nobody on staff works in After Effects, the template has no builder. Our Autografs include ready-made sports templates already rigged for Templater, so you bring the roster and skip the build. Dataclay also offers custom development for teams that want templates built to their own design.
And if the post is a one-off, such as a season hype video cut shot by shot, that is a job for an editor. Templates are for the graphic you make every game, not the one you make once a year.
The bottom line is that player graphics for every game are a sheet problem first and a template problem second. Make one row equal one graphic, give lineups a column per slot, name columns and layers to Templater’s rules, and put status, target and file name in the sheet where the whole staff can see them. Get that right in preseason, and game day becomes typing jersey numbers.
Club media staff ask us a few things again and again when they set this up. Here are the answers.
Frequently Asked Questions
How do I make a starting lineup graphic from a roster spreadsheet?
Make the lineup one row, not one row per player. Templater turns each row into one graphic, so a lineup row needs a column for each slot’s name, number and photo, and the template needs a matching, explicitly renamed layer for every slot. Keep the roster on its own tab for reference and fill the lineup row from it, then preview the row before marking it ready.
Can Templater read the roster tab and the lineup tab at the same time?
No. Templater maps data from a single worksheet in a single data source. The worksheet it reads must carry every value the graphic needs, such as names, numbers and photo paths. Many teams keep a roster tab anyway and use their spreadsheet’s lookup formulas to fill the job worksheet. Preview a few rows to confirm the values arrive as expected, and never put formulas in the render-status column.
Why is one of my lineup columns not showing up in the graphic?
Check the header first. For Google Sheets, Templater does not support column headers that begin with a numeral, contain spaces, or contain the _ character, so a header like 1_name will not map. Then check the layer. It must be explicitly renamed to match the column exactly, even if its name already looked right, and it should have no spaces. Fix either one and preview the row again.
Can one sheet produce lineups, player of the game cards and milestone graphics?
Yes. If the designs are compositions in one After Effects project, a target column tells Templater which composition to render for each row. If they are separate project files, an aep column switches projects per row using full file paths. Keep a backup target set in the project so a blank cell does not stop the job, and make sure every project opens without missing fonts or effects.
What happens if a player’s headshot is missing?
You choose. Templater can skip the row, stop and ask, or use a branded placeholder, and the placeholder has been the default since version 2.9.5. Our documentation recommends it for batches because it keeps the run moving. For a club, a crest on a team-color background makes a good placeholder, so a missing photo looks deliberate rather than broken and the coordinator can replace it later.
Do we need Templater Bot, or is Pro enough for game days?
Pro is enough if someone is happy to render a range of rows with one click after the lineup or the final whistle. Bot is for graphics that build themselves as rows are marked ready, without anyone opening After Effects. It checks a Google Sheet at an interval no shorter than about eighteen seconds. The designer who builds and previews templates can work in Rig, which previews but does not batch render.
How do we stop graphics from overwriting each other?
Give every row a unique file name. An output column sets the name of each file and overrides an id column, and a formula that joins the date, the graphic type and the player’s surname keeps names unique across a season. Without the date, a second player of the game card for the same player can carry the same name, and the Bot will overwrite the earlier file.
