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 (charged to your GooseWorks credits).
Install / Use
npx skills add gooseworks-ai/goose-skills --skill create-creator-takes-h3Installs into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
OtherSupported Platforms
Our assessment of create-creator-takes-h3
create-creator-takes-h3 scores 91/100 on our quality scale, 47th of 283 Other skills we index (top 17%).
Its SKILL.md is 32 KB long, well organised into 20 sections with 2 code examples: a thorough specification that gives an agent plenty to work with.
With 1,222 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 33 days ago, so create-creator-takes-h3 is actively maintained.
- Our last check on 2026-10-09 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-10-26. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
create-creator-takes-h3 compared with similar skills
All 4 of these similar skills score higher than create-creator-takes-h3; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| create-creator-takes-h3 (this skill)by gooseworks-ai | 91 | 1.2k | 33d ago | SKILL.md |
| LocalAIby mudler | 100 | 50.0k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 137.2k | 11d ago | SKILL.md |
Frequently asked questions
- How do I install create-creator-takes-h3?
- Run
npx skills add gooseworks-ai/goose-skills --skill create-creator-takes-h3. The install tabs above show the steps for each supported agent. - Which AI agents does create-creator-takes-h3 work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is create-creator-takes-h3 safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is create-creator-takes-h3 still maintained?
- The repository was last updated 33 days ago, so create-creator-takes-h3 is actively maintained.
Skill content
View source on GitHubname: 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 (charged to your GooseWorks credits). 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: superseded version: "2.9.1" superseded_by: creator-h3@1.8.0
Superseded by:
creator-h3@1.8.0. Compatibility scripts retain the source-review guards; frozen versions are unchanged.
create-creator-takes-h3
Summary. Generate one creator take, review the actual picture and sound, then continue with qualified sources. Keep native speech attached to its picture and assemble only complete reviewed takes. The provider can still invent words, drift in identity or fail an action; prompts and transcripts do not certify a pass.
Use the shared builder for people. Defaults: GPT Image 2, phone capture in a lived-in room, deep focus, no bokeh, no retouching, and one light lock (window or lamp light from one side, normal exposure, no HDR, matte skin, no over-sharpening). Studio or shallow focus only when the reference is shot that way. No forced flaws; marks only when the user chose them, and a skin condition only when the product treats it. A person who acts is an action shot, not a talking head.
| Script | What | Cost |
|---|---|---|
| make_character.py | build the creator still from the user's choices, one shot | paid (one still, cents) |
| pair_voice.py | the voice for this person: a matched ElevenLabs voice, or a Voice Design request | free (Voice Design itself is paid) |
| 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, 768P by default) |
| 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.
make_character.py is the shared builder for any generated person still in a custom video, not
only for H3 takes. Fetch create-image-fal with it; the script calls its gen_image.py. Before
the paid call, price the exact --payload-out request with data_price_provider (free, read-only):
--dry-run --payload-out work/character/payload.json writes {"model", "body", "quality_tier"} (plus
upgrade and query when there are any), the exact request gen_image.py will send, and generates
nothing. Send the body, and the query fields (shot_scene, upgrade_*) as top-level fields of the
price request, so the check prices the call that will run.
Quality tier: Standard or Best
The customer picks Standard (the default) or Best at script approval. Pass it as --tier.
| Setting | Standard | Best |
|---|---|---|
| Still (make_character.py --quality) | GPT Image 2 medium | high |
| Takes (plan_takes.py --resolution) | H3 768P | 768P |
- No video above 768P unless the customer asks (16 Oct 2026). The finished video is 1080×1920 either way: the last edit step scales the 768P picture up with
ffmpeg -vf scale=1080:1920:flags=lanczos, at no cost. fal makes H3 1080P from a native 768P take plus a refinement pass. - Choose the resolution before the first take. Later takes copy t1's voice and are reviewed against it, so
run_takes.pyrefuses to go on while any take was made at another resolution: re-plan and re-roll those takes. - Above the tier's default is an upgrade for one shot, never for the whole video, and it needs a reason (
scripts/tiers.py, the GooseWorks server's names):- a picture (
make_character.py --quality highunder Standard) after a failed check:--upgrade-reason failed_attempt --upgrade-attempt <the failed call's operation id> --upgrade-why "<one line>"; - anything when the customer asks:
--upgrade-reason customer_asked --upgrade-quote "<their words>". A video upgrade (H31080P) is only ever this: never after a failed check alone.
- a picture (
- After one failed check, judge the shot. Retry once at the same setting when a prompt fix should work (a wrong pose, a missing prop). Upgrade the picture straight away when medium probably can't do it (small label text, a complex product shape, many parts that must stay exact).
- The call says which shot it is.
make_character.py --shot-scene <n>(a still made for one scene; leave it out for a shared person, even on an upgrade) and each take that speaks one scene sendshot_scene, with the upgrade'supgrade_*fields, as the GooseWorks query.character.json,takes.jsonand the--payload-outfile record the tier, the setting and the upgrade.
Run
# the user's person, one command, one still. --dry-run prints the prompt and spends nothing.
python make_character.py --capture phone --recording counter --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 full bookshelf behind her, in focus" --voices voices.json --voice-accent american --out work/character # writes character.png AND character.json
# add --action "<each scene action she performs>", --voices voices.json and --voice-accent/--voice-energy (see below)
python plan_takes.py --beats cutlist.json --character character.json --out work/takes --reference-wps <reference rate>
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 --reviews work/takes/source-reviews.json --qualification work/takes/qualification.json --go # after t1 passes actual AV review
# Transcribe and inspect EACH take into its planned tN.words.json BEFORE joining.
python join_takes.py --require-words --reviews work/takes/source-reviews.json --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.
plan_takes.py rejects a placeholder identity or one without age or gender. These
must come from the chosen creator brief: copying an example once produced the same
unrequested man across builds. An unspecified identity creates a composite face.
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.
Action shots, skin condition and light (2.5.0)
Two test videos looked AI-made. Every B-roll person was built as a talking head (centred, looking at the lens, hands free, clear skin), and the light was flat, glossy and perfectly exposed.
- An action shot frames the action. With
--action "..."or--capture phone_observer, the still is an action shot: the hands, the object and the face working on it are in frame, off-centre, the eyes on the task, the hands in use, the head 25-40 % of the frame (20-35 % forphone_observer). The action text goes into the prompt.--shot talkingkeeps the talking-head defaults for someone who talks to the lens while acting.character.jsonrecordsshot. - Show the condition the product treats.
--skin-condition "visible blackheads on the nose, oily T-zone"(or "a few small acne spots") puts it on the person, real and unretouched. It needs no--marks-approved: it comes from the product, not a random mark. Without it, no marks are invented. An oily condition drops "greasy shine" from the negative.character.jsonrecordsskin_condition. - One light lock. Every capture asks for window or lamp light from one side, normal exposure, no HDR, matte skin with no added shine and no over-sharpening. creator-h3 1.6.0 and video-h3max 1.2.0 repeat it in the motion prompt.
Both hands, voice and pace (2.4.0)
A test video went wrong three ways. These rules stop each one.
- Both hands busy: no selfie. The presenter pressed a strip on her nose with both hands under a selfie capture, and the model added a third hand holding the phone. Pass every scene action with
make_character.py --action "...". An action that uses both hands (apply, smooth, press, peel, squeeze, hold with both hands) refuses--recording selfieand makes a propped phone (counter) instead; use--capture phone_observerfor a friend filming.plan_takes.pydoes the same for beats whoseaction,picture,visual,shotordescriptionsays so, or forrequired_featuresapplication: it refusesphone_selfieand usesphone_counter(creator-h3 and talking takes have nophone_observer; that capture is make_character.py's, for non-speaking clips). Both print why, and recordcapture_decision(incharacter.jsonandtakes.json). - The voice fits the face. The narrator was picked apart from the presenter (a 28-year-old woman) and was a voice reused across brands.
make_character.pynow recordsvoice_pairincharacter.json, from the same age and gender plus--voice-accentand--voice-energy. With--voices(a saved voice list; see 2.6.0 below) it is the best voice that fits;--voice-exclude <id>keeps another brand's narrator out. With--voice-design(or when nothing in the list fits) it is a Voice Design request:POST /v1/text-to-voice/designwithvoice_description,model_id(eleven_ttv_v3) andtext(100-1000 characters) orauto_generate_text, thenPOST /v1/text-to-voicewithvoice_name,voice_descriptionand the chosen preview'sgenerated_voice_id. Voice Design is paid: quote it, listen to the previews, then save one. Usevoice_pairfor every narration of this person. - Pace from the reference. The narration read at 2.62 words a second against the reference's 3.20 (270 words in 84.45 s). Measure the reference's rate yourself: transcribe it with word timestamps, join whisper's sub-word tokens into real words, skip any token with no letter or digit, and divide the word count by the seconds from the first word's start to the last word's end (the
video-production-harnessskill ships this count
Truncated for display — read the full file on GitHub.
Related Skills
LocalAI
50.0kLocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
137.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
