Roll Call
Every frame named from the roster, before you leave the gym.
Your camera writes the subject barcode into every frame. Your roster CSV carries the same barcode. Roll Call does the join and renames the folder — six frames of one kid become 8829104_01 through _06, in the order you actually shot them.
Beta
Roll Call is new and is not selling credits yet — every account starts with 500 free files. Please run it against a shoot you have already delivered, or a copy of one, rather than tonight's job. It renames files on your disk, and while every run is logged and reversible, a beta is the wrong place to find that out.
Tell me what broke, what was confusing, and what your lab actually wants the filenames to look like — that last one is the part I most need to hear.
What leaves your computer
Your photographs: nothing. Not the file, not a smaller copy, not a thumbnail, not a hash of the pixels. Each image is read here in your browser — about the first 256 KB, where the metadata lives — and the picture itself never moves.
Your roster: the barcode column, and nothing else unless your filename pattern asks for more. Parent emails, phone numbers, addresses — whatever else your gallery platform put in that file stays on your computer. Put {first_name} in the pattern and first names have to go, because the server is what builds the name; stage 4 names those columns before you press anything.
Per image, three things: a filename, a barcode, and when it was shot. That is the whole conversation — a 900-image job sends a few kilobytes of text. Afterwards the roster is not kept: what survives is a count, a price, and the frame order, stored as one-way keys rather than filenames.
You do not have to take our word for it. Open the check page, turn your wi-fi off, and point it at a folder of picture day files. It still works, because that page never talks to the internet at all.
Load the roster
Your roster, exported from GotPhoto, PhotoDay, Sytist or a spreadsheet — any file with a header row. In Excel that is File › Save As › CSV; in Google Sheets, File › Download › Comma-separated values.
A PDF works too. If the league only ever sends a PDF, Roll Call reads the text off it and shows you the table it found before anything uses it — a PDF has no header row of its own, so you confirm the columns. A scan or a photograph of a roster has no text in it to read, and it will say so rather than guess.
Choosing it does not upload it. The file is read in this page, and the cleanup below runs on your own machine. When a plan is built, the only column that leaves is the barcode one — plus any column your filename pattern names, and stage 4 says which.
Read the image folder
Only the metadata header of each file is read — about the first 256 KB. Image data is never loaded and never sent.
Cull first, then rename. The sequence number is a position, not a label bound to the image: deleting a subject's first frame after the rename does not promote _02 to _01, and deleting it before shifts the whole group. Get the folder to the frames you are keeping, then run this.
Build the new filename
Fills {year} in the pattern below. Set once for the whole batch rather than read from each photo — a September shoot is usually sold as the following season, and a frame with no capture date would come out blank. {yy} gives the last two characters, so 2026 becomes 26.
{seq2} is the default for a reason: anything that sorts filenames as text puts _10 before _2, which goes wrong silently the moment a subject has ten frames. Two digits make text sort and number sort agree. {seqa} gives you a, b, c instead if that is what your lab expects.
Review, then rename
| Status | Current name | Barcode | Frame | New name |
|---|
Also build a Pixnub / SPA batch CSV
One row per renamed frame, per template — the file Roll Call just produced is the file Pixnub opens. Every column SPA reads is in the file, checked against Pixnub’s own published list, whether or not Roll Call can fill it. The text layers it fills from your roster are NAME, FIRSTNAME, LASTNAME, NUMBER, TEAMNAME, LEAGUENAME, SCHOOLNAME, CLASS, POSITION and YEAR. The action columns, SPATEXT1–5, APPEND FILE NAME, TEAM FILE, LOGO FILE, PLAYER 2 / 3 FILE and the HIDE / SHOW LAYER columns come through blank, in the file and ready for you to fill in.
Rows are grouped by template, which is what SPA asks for — it restarts Photoshop on every template change. Headers are matched by name, not position, so the order here does not matter to SPA. Values are quoted only when they have to be, and Roll Call tells you how many cells needed it: the spec asks for curly quotes, so a roster value carrying a comma or a straight quote is worth a look.
Guessed from your roster's headers. Change any of them — a wrong guess in the LASTNAME column is worse than a blank one.
SPA gets all three name columns whichever way your roster is built. With first and last but no full name, Roll Call writes “First Last” into NAME. With only a full name, NAME is kept exactly as your roster spells it and FIRSTNAME and LASTNAME are split out of it — Stallworth, Avery and Avery Van Dyke both come out right, and a one-word name gets no invented surname. Avery Kate Ortiz is the case nothing can settle from the string alone — a middle name and a two-part surname look identical — so Roll Call takes the last word and tells you how many rows it was unsure about. Map a real last-name column and it never guesses at all.
Point Roll Call at the folder and it fills this in with the exact filenames — no typing, no spelling to get wrong. It reads names only. No template file is opened, read or uploaded, and the names never leave this page: the SPA batch is built here, not on our server. The list is remembered for next time, so a season’s templates are entered once. Edit or delete any line; what is in the box is what goes in the CSV.
Typing them by hand still works, and is the only option if your templates live somewhere Roll Call cannot be pointed at. A typed name is not checked against anything — one that does not match a real file is a row Pixnub will not resolve, which is the argument for reading the folder instead. Every frame gets a row for every template listed here — six frames on four templates is twenty-four rows — and each row's NEW FILE NAME carries the template's name so two templates cannot write over each other. Leave it empty for a batch you finish yourself.
This fills SPA’s SUB FOLDER column, which is where each finished render lands. It is relative to the output folder you set in SPA, not an absolute path — picking a folder here takes its name, because a browser is never told where a folder actually lives. Leave it empty and the column comes through blank, which is what Roll Call did before.
Tokens make it per subject rather than one folder for the whole job: {team}/individuals is the layout Lineup writes, and it gives every team its own folder. A slash you type nests; a slash inside a value does not, so a team called Falcons / 12U makes one folder. Anything that would climb out of the folder SPA was pointed at, or point somewhere absolute, is stripped — a delivery layout does not get to write outside the job.
Any other column you want in the file. They come through empty, in the order you list them, for you to fill in — useful for a column your own workflow reads, or one SPA gained after this page was written. A name that already exists is skipped: SPA matches headers case-insensitively, so a file with both SPATEXT1 and spatext1 has one ambiguous column rather than two.
Renaming in place is instant and does not copy anything. Every file moves to a temporary name first and then to its final name, so a pattern that swaps two names cannot destroy either of them, and a run that stops partway leaves files you can put back from the log. Roll Call will not start a plan where any new name would land on a file that already exists.
Direct renaming needs a Chromium browser — Chrome, Edge, Brave, or Arc. Safari and Firefox read the folder the same way and give you a rename script to run instead.