CinePrompt Skill
Build CinePrompt prompts and share links directly — no browser needed.
How It Works
- User describes a shot in natural language
- You translate it into a CinePrompt state JSON object
- The
create-share-link.jsscript inserts it into Supabase and returns a/p/share link - User gets the link + prompt text to copy into any AI video tool
Authentication
Requires a CinePrompt API key (Pro subscribers only). Set via:
--api-key cp_xxxflagCINEPROMPT_API_KEY=cp_xxxenv var
Internal/owner use: set CINEPROMPT_SERVICE_KEY env var for direct insert (bypasses Pro check).
Creating a Share Link
echo '<STATE_JSON>' | node <skill>/scripts/create-share-link.js --api-key cp_xxx
Output is JSON: {"url":"https://cineprompt.io/p/abc123","shortCode":"abc123","promptText":"...","mode":"single"}
You can also pass the prompt text explicitly if you've crafted it by hand:
echo '{"state":<STATE_JSON>,"prompt":"Your custom prompt text"}' | node <skill>/scripts/create-share-link.js --api-key cp_xxx
State JSON Structure
{
"mode": "single",
"complexity": "complex",
"subjectType": "character|object|vehicle|creature|landscape|abstract",
"fields": { ... },
"shots": [],
"characters": []
}
Required Top-Level Fields
mode: Always"single"for now (multishot/fm support later)complexity:"simple"or"complex"— complex unlocks format, camera body, lens, film stock, color sciencesubjectType: Which subject panel to showfields: Object mapping field names to values (strings or arrays)
Field Reference
All valid field names and values are in <skill>/field-values.json. Key fields:
Style:
media_type(array):["cinematic"],["cinematic","documentary"], etc.documentary_style: only when documentary is in media_typegenre: only when cinematic is in media_type (array OK)commercial_type: only when commercial is in media_typetone(array):["peaceful"],["dramatic","moody"]format: (complex only)"35mm Film","16mm Film","DSLR / Mirrorless", etc.
Subject — depends on subjectType:
- landscape:
land_season,land_scale - character:
char_label,age_range,build,hair_style,hair_color,subject_description,wardrobe,expression,body_language,framing - creature:
creature_category,creature_label,creature_size,creature_body,creature_skin,creature_description - object:
obj_description,obj_material,obj_condition,obj_scale - vehicle:
veh_type,veh_description,veh_era,veh_condition - abstract:
abs_description,abs_quality,abs_movement
Actions:
movement_type(array):["walking"],["running","turning"]pacing:"in real-time","in slow motion","time-lapse", etc.action_primary: free text describing the primary action
Environment:
setting:"exterior","interior","interior to exterior","exterior to interior"location_type:"open field, meadow","urban street","forest", etc.custom_location: free text location descriptionlocation: free text additional location detailsenv_time:"golden hour, warm late afternoon light","night","dawn", etc.weather:"clear sky","overcast","rain","fog", etc.props: free textenv_fg,env_mg,env_bg: foreground/midground/background free text
Cinematography:
shot_type:"establishing shot","close-up","wide shot","medium", etc.movement:"pull out","push in","dolly","tracking","static","orbit", etc.camera_body: (complex)"ARRI Alexa 65","RED V-Raptor","Sony Venice 2", etc.focal_length:"24mm lens","35mm lens","50mm lens","85mm lens", etc.lens_brand: (complex)"Cooke S4/i","ARRI Master Prime", etc.lens_filter: (complex)"Black Pro-Mist","Glimmerglass", etc.dof:"deep focus","shallow depth of field, bokeh","tilt shift miniature", etc.lighting_style:"soft light","hard light","high contrast","silhouette","backlight", etc.lighting_type:"daylight","moonlight","candlelight","neon", etc.key_light,fill_light: (complex) free text
Palette:
color_science: (complex)"ARRI LogC3 flat log footage, ungraded", etc.film_stock: (complex)"Kodak Portra 400 film colors","Kodak Vision3 500T film colors", etc.color_grade:"warm tones","cool tones","teal and orange","desaturated","black and white", etc.palette_colors: free text (primary/secondary colors)skin_tones: free text
Sound:
sfx_environment(array):["birds singing, nature ambience"],["city traffic"],["wind"]sfx_interior(array):["room tone"],["clock ticking"]sfx_mechanical(array):["engine"],["machinery"]sfx_dramatic(array):["bass rumble"],["heartbeat"]ambient: free text custom ambient/SFXmusic_genre:"orchestral score","electronic score","jazz score", etc.music_mood:"tense, building","melancholic, sparse", etc.music: free text custom music description
Translation Guide
When a user describes a shot, map their words to CinePrompt fields:
| User says | CinePrompt field(s) |
|---|---|
| "golden hour" | env_time: "golden hour, warm late afternoon light" |
| "pulling back" / "pulling out" | movement: "pull out" |
| "birds chirping" | sfx_environment: ["birds singing, nature ambience"] |
| "empty land" / "open field" | subjectType: "landscape", location_type: "open field, meadow" |
| "cinematic documentary" | media_type: ["cinematic", "documentary"] |
| "establishing shot" | shot_type: "establishing shot" |
| "bokeh" / "blurry background" | dof: "shallow depth of field, bokeh" |
| "everything in focus" | dof: "deep focus" |
| "handheld feel" | movement: "handheld" |
| "slow motion" | pacing: "in slow motion" |
| "warm look" | color_grade: "warm tones" |
| "shot on film" | format: "35mm Film" (complex) |
Picking the Right Complexity
- Simple: Use for most shots. Covers style, subject, actions, environment, basic cinematography, palette, sound.
- Complex: Use when the user specifies camera body, lens brand, film stock, color science, lens filters, or custom lighting rigs. These fields only appear in complex mode.
Example
User: "A weathered fisherman standing on a dock at dawn, fog rolling in, handheld close-up, desaturated"
{
"mode": "single",
"complexity": "simple",
"subjectType": "character",
"fields": {
"media_type": ["cinematic"],
"tone": ["moody"],
"char_label": "A weathered fisherman",
"subject_description": "Deep wrinkles, sun-damaged skin, salt-crusted hands",
"expression": "stoic, gazing out to sea",
"pacing": "in real-time",
"setting": "exterior",
"location_type": "dock, pier",
"env_time": "dawn, first light",
"weather": "fog",
"shot_type": "close-up",
"movement": "handheld",
"dof": "shallow depth of field, bokeh",
"lighting_style": "soft light",
"lighting_type": "daylight",
"color_grade": "desaturated",
"sfx_environment": ["waves crashing, water ambience"]
},
"shots": [],
"characters": []
}
Then pipe it to the script and send the user the resulting URL.
Batch Workflow
For multi-shot sequences, create each shot as a separate share link. Present them as a numbered list with URLs. The user can then open each, tweak, and copy prompts into their video tool of choice.
Notes
- The script auto-generates prompt text matching CinePrompt's frontend logic (section ordering, merge rules, sentence assembly)
- You can override with
--promptif you want to hand-craft the text - Share links restore the full form state including complexity tab and subject type
- Valid field values: check
<skill>/field-values.jsonfor exact button values - Array fields (media_type, tone, sfx_*, movement_type) accept multiple values
- Free text fields (custom_location, subject_description, action_primary, etc.) accept any string