Skip to content
Marketing
Skill

/create-creator-takes-h3

Generate an AI creator talking to camera, saying an approved script, as one continuous track — H3 Max reference-to-video through the GooseWorks fal-proxy (bills the Ads agent). Plans takes on line boundaries under H3's 15s cap, dry-runs a cost estimate, generates the first take

BOOST
From plugin
goose-skills
1.2k200 skills
Install
$ npx -y skills add gooseworks-ai/goose-skills --skill create-creator-takes-h3 --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/create-creator-takes-h3

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate an AI creator talking to camera, saying an approved script, as one continuous track — H3 Max reference-to-video through the GooseWorks fal-proxy (bills the Ads agent). Plans takes on line boundaries under H3's 15s cap, dry-runs a cost estimate, generates the first take

SKILL.md

create-creator-takes-h3.SKILL.md
name: create-creator-takes-h3
description: Generate an AI creator talking to camera, saying an approved script, as one continuous track — H3 Max reference-to-video through the GooseWorks fal-proxy (bills the Ads agent). Plans takes on line boundaries under H3's 15s cap, dry-runs a cost estimate, generates the first take alone so its voice can be locked and passed to every later take, joins takes with measured 0.10s dissolves, and moves each line's timing onto the words actually spoken. Use for any format with a generated creator speaking a script (split-screen, screen inserts, talking-head ads).
status: active

create-creator-takes-h3

A generated creator who says an exact script, with one consistent face, room and voice across several takes.

| Script | What | Cost | |---|---|---| | `make_character.py` | build the creator still from the user's choices, one shot | **paid** (one still, cents) | | `plan_takes.py` | split lines into takes (under 15s each) and write the prompts | free | | `run_takes.py` | generate the takes, dry run unless `--go` | **paid** (H3 Max, ~$0.16/s at 1080P) | | `join_takes.py` | join into one creator track | free | | `align_beats.py` | move line timings onto the spoken words | free |

`character-prompt.json` is the realism prompt for the character still. **Do not fill it by hand.** `make_character.py` fills every slot and calls `create-image-fal`, because a hand-filled prompt left slots blank and produced the composite face the formula warns about, and different runs filled it differently.

Run

# the user's person, one command, one still. --dry-run prints the prompt and spends nothing.
python make_character.py --age 34 --gender woman --ethnicity "South Asian"     --hair "shoulder-length black hair, slightly frizzy at the crown, one side tucked back"     --wardrobe "plain charcoal crew-neck t-shirt, slightly creased"     --scene "a lived-in home office, a bookshelf softly out of focus behind her"     --out work/character        # writes character.png AND character.json
python plan_takes.py --beats cutlist.json --character character.json --out work/takes
python run_takes.py --spec work/takes/takes.json                  # dry run: plan + estimate
python run_takes.py --spec work/takes/takes.json --only t1 --go   # after the user approves
python run_takes.py --spec work/takes/takes.json --go             # the rest, voice chained
python join_takes.py --spec work/takes/takes.json --end <reel length> --out work/creator.mp4
# caption-burn: transcribe.py --media work/creator.mp4 --out work/creator.words.json
python align_beats.py --beats cutlist.json --words work/creator.words.json \
    --out cutlist.aligned.json --max-end <creator.mp4 length>

`character.json`, which `make_character.py` writes for you:

{"image": "character.png",
 "identity": "<age + gender + look from the user's brief>, <hair>, <wardrobe>",
 "environment": "<the real room in the approved still>, window daylight",
 "delivery": "<the tone the user chose>. Whatever the tone, keep the face relaxed: an over-energetic read can give a constant grin and busy hands that read as AI."}

**The user chooses who the creator is.** Ask for age, gender and ethnicity, plus hair, wardrobe and room, then pass them to `make_character.py`. Those six are required arguments, so there is nothing to forget and nothing to invent. There is no default person: never copy a look from an example, a reference build or a demo reel.

This is now enforced, not advisory. `plan_takes.py` rejects an `identity` that is still a placeholder, or that states no age, or that states no gender. It was advisory once and the docstring carried "a man in his late 20s ..." as an example: that got copied verbatim, the old non-empty check passed it, and every build produced the same unrequested man. An unspecified person is exactly the ambiguous composite face the realism formula warns about, and it is what a reviewer sees as "obviously AI".

`delivery` now defaults to **calm and conversational**. The default used to be energetic, which this file already warned "can give a constant grin and busy hands that read as AI", so avoiding a known failure depended on remembering to opt out. Pass `delivery` to override.

`identity` and `environment` go into every take **word for word**. Write them once from the approved still, then never retype them: a person described two ways drifts between takes.

Choices

These are the user's calls (the recipe's `choices`), never defaults of this atom:

  • **Creator** (`identity`) — age, gender, look. Asked of the user; no default person.
  • **Setting** (`environment`) — the room behind them, written from the approved still. Asked of the user.
  • **Tone** (`delivery`) — how they speak. Asked of the user; if missing, `plan_takes.py`

falls back to a neutral conversational read and prints a note.

  • **Voice** — follows the creator (age, gender, accent) and is locked from t1.

Rules

1. **Lock order: script, then character still, then takes.** Show the still before any take. A take costs dollars; a still costs cents. 2. **First take alone, then listen.** Every later take copies t1's voice (its audio is passed as `reference_audio_urls`). A robotic or mismatched voice in t1 is in every take. If the user rejects it, `--reseed t1` and generate t1 again. 3. **Voice matches the person.** Age, gender and accent follow the character. The prompt's delivery line sets the tone; change it through `delivery`, not by editing the prompt file. 4. **No square brackets in lines.** H3 speaks them aloud; `plan_takes.py` refuses them. 5. **Dialogue stays verbatim.** Takes are sent with `prompt_expansion_mode: disabled`. 6. **Takes split between lines, never inside one**, and run 0.6s past the last word. `--split-at 6.3,14.5` joins the takes exactly at those line boundaries: the screen-insert format joins where an insert ENDS, so the cut is hidden under the screen. The voice runs under inse

Read more
Ships withgoose-skills

Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.

Get the whole plugin

Other skills on goose-skills.