Workout of the Day
A CrossFit box or training app posts the day's session as a whiteboard: five square frames carrying the date, the format, the movement list, the scoring standard and the class times, and nothing else. 24 seconds at 1:1 (1080x1080), built on a strict white-black-white-black-white ground alternation with marker red used only to mark a number or an instruction. Scene 03 is the hero — a right-aligned red rep column against a ruled divider, movement names in Anton at 68px with loads demoted to a 28px sub-line so they never compete for the same glance. It is a pure batch template: 24 dynamic fields (23 text plus one evergreen photo) map one-to-one onto a coach's programming spreadsheet, so a month programmed in one sitting renders thirty videos with no authoring after the first. Swapped per render: gym_name, date_label, session_name, session_focus, structure_line, structure_label, four movement rows (move_1..4_reps / _name / _detail), score_type, time_cap, coach_note, class_times, booking_line, and gym_photo.
- Aspect ratio
- 1:1 · Square
- Duration
- ~24s
- Category
- Sports
Try it with your own copy
Edit a field and the frame re-renders in your browser. No account, no credits - previews are free because they cost a browser paint, not a render.
What you can customize
This template exposes 24 dynamic fields you can swap per video - edit them in the editor or pass them to the API to batch-render variations at scale. The monospace name is the exact key to send in replacements.
Gym Name
textgym_nameCrosstown Barbell
~165 characters max · 2 lines
Date Label
textdate_labelThursday · 14 August
~25 characters max · 1 line
Session Name
textsession_nameBrickyard
~11 characters max · 1 line
Session Focus
textsession_focusConditioning
~18 characters max · 1 line
Structure Line
textstructure_lineAMRAP 18
~10 characters max · 1 line
Structure Label
textstructure_labelAs many rounds as possible in 18 minutes.
~51 characters max · 1 line
Move 1 Reps
textmove_1_reps15
~5 characters max · 1 line
Move 1 Name
textmove_1_nameWall Balls
~22 characters max · 1 line
Move 1 Detail
textmove_1_detail20 / 14 lb
~67 characters max · 2 lines
Move 2 Reps
textmove_2_reps12
~5 characters max · 1 line
Move 2 Name
textmove_2_nameToes-to-Bar
~22 characters max · 1 line
Move 2 Detail
textmove_2_detailScale: knee raise
~67 characters max · 2 lines
Move 3 Reps
textmove_3_reps9
~5 characters max · 1 line
Move 3 Name
textmove_3_nameHang Power Cleans
~22 characters max · 1 line
Move 3 Detail
textmove_3_detail135 / 95 lb
~67 characters max · 2 lines
Move 4 Reps
textmove_4_reps200M
~5 characters max · 1 line
Move 4 Name
textmove_4_nameRun
~22 characters max · 1 line
Move 4 Detail
textmove_4_detailOut and back
~67 characters max · 2 lines
Gym Photo
urlgym_photohttps://images.pexels.com/photos/9958671/pexels-photo-9958671.jpeg?auto=compress&cs=tinysrgb&w=1800
Score Type
textscore_typeRounds + Reps
~16 characters max · 1 line
Time Cap
texttime_cap18:00
~6 characters max · 1 line
Coach Note
textcoach_noteChoose a load you can cycle unbroken for nine. Break the toes-to-bar early, before the grip goes.
~195 characters max · 3 lines
Class Times
textclass_times05:30 · 09:00 · 12:00 · 17:30 · 18:30
~107 characters max · 2 lines
Booking Line
textbooking_linecrosstownbarbell.com/book
~88 characters max · 2 lines
Render it from the API
Copy either call below. Both already carry this template's ID and its real variable keys - swap the values for your own.
1. Preview it — free
Same body as a render. Costs no credits, creates no job. Returns a public URL that plays the video in a browser, plus a list of problems with your payload — a mistyped key is otherwise ignored in silence.
curl -X POST https://renderly.video/api/v1/previews \
-H "Authorization: Bearer $RENDERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "workout-of-the-day",
"replacements": {
"gym_name": "Crosstown Barbell",
"date_label": "Thursday · 14 August",
"session_name": "Brickyard",
"session_focus": "Conditioning",
"structure_line": "AMRAP 18",
"structure_label": "As many rounds as possible in 18 minutes."
}
}'2. Render it
Change one word in the URL. Keep templateId — it is what links your call to this template, so later improvements reach you automatically.
curl -X POST https://renderly.video/api/v1/renders \
-H "Authorization: Bearer $RENDERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "workout-of-the-day",
"replacements": {
"gym_name": "Crosstown Barbell",
"date_label": "Thursday · 14 August",
"session_name": "Brickyard",
"session_focus": "Conditioning",
"structure_line": "AMRAP 18",
"structure_label": "As many rounds as possible in 18 minutes."
}
}'The body above shows 6 of 24 variables. Send any subset — every key you leave out renders its authored default. Read the full contract, with character limits, from GET /api/v1/templates/workout-of-the-day/variables. See the previewing guide, the rendering guide, or the OpenAPI spec.
Frequently asked questions
How do I customize the Workout of the Day template?
Open the template in the Renderly editor and replace its 24 customizable fields (such as Gym Name) with your own text, images, or video. Every change previews instantly before you render.
How much does it cost to render this template?
Rendering is credit-based - 1 credit equals 1 minute of 1080p video. You only pay when you export, and credits never expire on the pay-as-you-go plan.
Can I generate this video at scale via the API?
Yes. POST this template's ID and a replacements object to /api/v1/renders - one call per row of data, 24 fields swappable per video. Send the same body to /api/v1/previews first to check it for free. No-code integrations like Zapier work the same way.
More Sports templates

Basketball Game Recap - Final Buzzer
An arena-loud, broadcast-grade 37-second 16:9 final-buzzer card a club, league, or fantasy/media app auto-posts the instant the game ends - the basketball sibling of the Sports Match Recap family (violet accent + Archivo Black vs. the soccer card's blue + Anton). Seven scenes: a "Final" cold open with both crests, the final score in team colors with an F buzzer chip, a hardwood-light by-quarter line score, a head-to-head team-stats panel with dueling bars, a Player of the Game spotlight, a hard-cut violet Next Game tease, and a sign-off end card. Swap the per-game dynamic fields - competition + round + venue, both team names, crests and a swappable arena backdrop, the home/away score, each team's quarter-by-quarter line, three labelled head-to-head stats, the player of the game + stat line + optional photo, and the next opponent + crest + date - to render a unique recap for every game off a game.final webhook or stats feed. (Team colors and the stat-bar proportions are baked to the sample; the Player of the Game panel falls back to a jersey-number graphic when no cutout is supplied.)

Sports Match Recap - Full-Time Scorecard
A broadcast-grade 37-second 16:9 full-time card a club, league, or fantasy/media app auto-posts the instant the final whistle blows. Seven scenes: a "Full Time" cold open with both crests, the final scoreline in team colors with an FT chip, a light goalscorers card, a head-to-head match-stats panel with dueling bars, a Player of the Match spotlight, a hard-cut blue Next Fixture tease, and a sign-off end card. Anton / Oswald / JetBrains Mono with an electric-blue system accent. Swap the per-fixture dynamic fields - competition + round + venue, both team names, crests and a swappable stadium backdrop, the home/away score, each side's goalscorers, three labelled head-to-head stats, the player of the match + stat line, and the next opponent + crest + date - to render a unique recap for every fixture off a match.finished webhook or league feed. (Team colors and the stat-bar proportions are baked to the sample; goal minutes render in the team text color.)

Sport
A dynamic sports template with energetic background music and bold text.