| name | generate-script |
| description | Decide the actual content (headline copy, feature lines, colors, etc.) for the chosen composition's variables. Use after pick-composition and before customize-composition. |
Generate the content
You've chosen a starter. Now decide what goes into it. Every starter declares a
set of variables — the text and colors a user can change. Your job is to
produce a value for each one based on the user's prompt.
Steps
- Open the chosen composition's
manifest.json. The variables array lists
every variable: its id, type, label, and default. (The authoritative
declaration also lives in index.html's data-composition-variables, but
the manifest mirror is easier to read.)
- For each variable, write a value that reflects the user's prompt:
- string variables (headlines, taglines, feature lines, CTAs): write
real copy. Keep it tight — respect any
maxLength. These render as
on-screen text, so punchy beats wordy. A headline is a few words, not a
sentence.
- color variables: choose hex colors (
#rrggbb) that match the mood the
user described. If they said "calm pastel", pick soft, low-saturation
tones. If they said "bold" or "dark", go high-contrast. Make sure text
color reads clearly against the background color.
- enum variables: pick one of the declared
options values.
- number / boolean: stay within any declared
min/max.
- If the user didn't give you something for a particular variable, make a
sensible choice that fits the overall brief rather than leaving the default
— the default is generic placeholder content.
Writing good on-screen copy
- Lead with the benefit, not the feature name.
- One idea per line. The feature lines in
app-trailer and the steps in
explainer each get a single short phrase.
- Match the user's tone. A playful app and an enterprise tool should not sound
the same.
- Don't invent claims the user didn't make (no fake stats, no "#1" superlatives
unless they asked).
Output of this step
A plain JSON object mapping each variable id to your chosen value, e.g.:
{
"app_name": "Strand",
"tagline": "Notes that think with you.",
"feature_1": "Capture ideas in a tap",
"accent_color": "#7c9cff"
}
Write this to /.agents/workspace/output/proposed.json.
Also write the narration script
Every video gets a spoken voiceover by default. Alongside the on-screen
variables, write a short narration script — what the voice says — sized to
the starter's duration_seconds (roughly 2–3 spoken words per second, so a 6s
starter is ~12–18 words). It should complement the on-screen copy, not just
read it verbatim — set the scene, land the benefit, end on the CTA. Keep it
tight; the voiceover step will trim it further if the synthesized audio runs
long.
Save it to /.agents/workspace/output/voiceover_script.txt. (Skip only if the
user explicitly asked for no narration.)
Then move to generate-voiceover, which synthesizes the narration, and then
customize-composition, which validates everything against the composition's
real schema before rendering.