> An installable agent skill for AI Content Drop. Machine-readable copy: > https://aicontentdrop.com/skills/drama-studio/SKILL.md. > Ships with the aicontentdrop package, and is listed in > /skills/index.json.

A short drama, from premise to finished episode

Drama Studio writes a short drama (cast, locations, and every episode's scenes with beats, shots and dialogue), renders each clip, and cuts the episode into one vertical video. A drama an agent starts and one the person starts at <https://aicontentdrop.com/generate/drama> are the same record.

1. Check that the tools are here

The eight drama tools appear on tools/list for every signed-in account; a caller without a sign-in does not see them. When they are not listed, let the host sign the person in, or hand over the Drama Studio page with the premise you worked out (skill short-drama-writer covers writing one). Do not assemble a drama out of generate_video calls: the characters would not stay the same between clips.

2. Settle the brief

Ask only for what changes the result or the cost:

3. Write

start_drama with the premise and settings. It returns a drama_id and a write_job_id at once; the draft lands in 3 to 5 minutes. credits_reserved is what the draft costs, charged only when it lands. Call get_drama every 30 seconds; stop after 10 minutes and report the last status.

4. Read the script back, then accept it

The draft arrives as pending_draft on get_drama: logline, cast, episodes with scenes and beats, and any issues the writer flagged. Summarise it for the person in a few lines (the hook, the turn, the ending question) before anything is spent on video.

5. Price the episode, then ask once

quote_drama_episode (optionally with episode_id; it defaults to the first unfinished episode) prepares every clip's shot and returns one quote per clip that has no current render: clip_id, quote_id, credits, seconds, model, plus total_credits and expires_at. It costs nothing. If complete is false, pricing stopped early to answer in time; call it again to finish. Clips in unavailable cannot be rendered right now; say which and why.

Quotes last 10 minutes. Ask with the total:

> Episode 1 is six clips, 30 seconds in all: 180 credits, each clip charged only > if it renders. Shall I render it?

Read the numbers from the quote, never from memory.

6. Render, follow, cut

  1. produce_drama_episode with the clips array of {clip_id, quote_id}
  2. pairs exactly as the quote returned them (1 to 24 per call). started lists the renders that began; refused lists any clip that did not, with a code. A retry with the same quote returns the same render, never a second charge.

  3. Call get_drama every 30 seconds until the episode's clips_ready equals
  4. clips_total; stop after 15 minutes and report which clips are still rendering.

  5. assemble_drama_episode cuts the episode from the newest render of each
  6. clip. It costs no credits but needs a paid plan. The finished video appears as episodes[].cut.video_url on get_drama.

<!-- drama-craft:begin --> <!-- Rendered by scripts/build-drama-skills.ts from server/drama/craft. Edit the source constants, not this section. -->

Named references and directing one clip

Every reference has a stable handle: @Name for a character (the spaces closed up), @Name.look for a changed look such as hair down or glasses off, @Place for a location, @Prop for a prop and @extras for the group of background people. A prompt names a reference by its handle and says what must match; the studio binds the pictures behind the handles.

get_drama lists every reference the drama holds under references[]: the handle (name), its kind (character, look, location, prop or extras), the entity_id it belongs to, the asset_id of the picture and whether it is the selected one. Use the handle when you describe a change to a clip, and when the person asks for "the one with her hair down", find the look by its handle rather than by guessing a picture.

"Generate scene 2." Price the episode with quote_drama_episode, then call produce_drama_episode with only the clips whose scene_id is that scene's; every clip in the quote carries its scene_id. Say the scene's total, not the episode's, and wait for the yes.

One note, one clip. When a take misses, change one thing: direct_drama_clip with the clip_id, the block to rewrite (one of the eleven block names, or PROMPT when the clip has a single prompt) and the replacement text. It changes nothing but that block and costs nothing; the clip's earlier renders stop counting as current, so price it again with quote_drama_episode before rendering. Put the new take beside the old one (get_drama lists both under the clip) and keep the better one.

The clip prompt: a shot list in named blocks

A clip prompt is a shot list, not a paragraph: 11 named blocks in a fixed order, each printed as its name on one line and its body below, with a blank line between blocks. Write what the camera can see and hear, never a mood or an intention; a feeling is shown by what a face and a body do. Say everything once, in the block that owns it, so the model is never told two different things.

Block What goes in it
SCENE CONTEXT Three to five sentences: what happens in this clip, the turn it carries, who is in the room, then the length, the aspect ratio, the language and the look.
ACTIVE REFERENCES One line per character, place and prop under a handle that starts with @: a one-line look, the words "face, hair and outfit match the reference", what the character wears and carries in this scene, and for anyone who speaks in the clip the voice description copied word for word.
LOCATION MAP The room as a map in words: where the furniture, doors, windows and walking paths are and where the camera usually stands, so every angle agrees with every other.
FIRST FRAME / BLOCKING Who is where at the first frame, left and right as the camera sees it, near or far, standing or seated, and where each person is looking.
FORMAT MODE One continuous shot, or hard cuts at stated seconds and nowhere else; real time; a hard cut to black at the last second when the episode ends on this clip.
OPTICS Per segment: the shot size with its field of view in degrees, the camera height, the distance, the move and where it ends; nothing drifts inside a segment.
ACTION TIMING Every beat and every line against the clock: the physical action, each quoted line under its speaker's handle with how it sounds at that moment, and what the other person's face and body do.
PHYSICS One sentence for each fabric, hair or object the actions name: how it moves and how it settles.
LIGHTING The one lighting logic of the scene: the sources, their direction, colour and hardness, the same in every shot.
AUDIO The ambience in one sentence; voices exactly as written; no music.
POSITIVE LOCKS What must hold: only the quoted lines are spoken, only the listed cast is in the room, no text on screen, the room is the referenced place, the romance ceiling, and the misses seen earlier in this project.

Optics. Every shot size has a field of view and a distance: wide 84°, several metres back; two-shot 63°, about three metres away; medium 47°, about two metres away; close-up 29°, within arm’s reach; extreme close-up 18°, very close; detail 12°, very close. Name the height (eye level unless the shot says low or high), the move (push in, pull back, track, pan, tilt, handheld, or static) and where the move ends; one move per segment, and the camera holds there when it is done.

Timing. Time runs from zero through the clip. Seedance 2.5 reads whole-second intervals written as [0s-10s]; Seedance 2.0, Wan 3.0, HappyHorse 1.1, MiniMax H3, MiniMax H3 2K read numbered shots with their length in seconds. Under each interval or shot: the physical action, then each quoted line as @Speaker: "the words" with how it sounds in brackets, then the other person's reaction. Lines are kept word for word; the model is never left to invent one.

Length. Each lane has a ceiling in characters: Seedance 2.5 6000, Seedance 2.0 6000, Wan 3.0 3000, HappyHorse 1.1 3000, MiniMax H3 3000, MiniMax H3 2K 3000. Over the ceiling, whole blocks are dropped in this order until it fits: PHYSICS, LOCATION MAP, SCENE CONTEXT, LIGHTING, AUDIO, FIRST FRAME / BLOCKING, FORMAT MODE, OPTICS. ACTIVE REFERENCES, ACTION TIMING, POSITIVE LOCKS are never dropped and nothing is cut mid-block: the cast, the timing and the locks are the clip.

Locks. The locks are written as what must hold, never as a list of things to avoid: only the quoted lines are spoken and nobody else speaks; only the listed cast is in the room and no one enters, passes or is reflected; no text, captions, subtitles or logos appear; the room is the referenced place with its layout, materials and light; the romance level is a ceiling the clip never climbs on its own; and anything a check sent back earlier in the same project is locked out by name.

Voices. A voice is text in the prompt: the character's voice description (accent as sounds in the mouth, pitch, pace, timbre) sits under their reference line, copied word for word into every clip they speak in, so the same voice comes back from every take.

Handles. Every reference has a stable handle: @Name for a character (the spaces closed up), @Name.look for a changed look such as hair down or glasses off, @Place for a location, @Prop for a prop and @extras for the group of background people. A prompt names a reference by its handle and says what must match; the studio binds the pictures behind the handles.

One change per retake. A take that misses is fixed with one change: name the one block that was wrong, rewrite that block, keep every other block as it was, and make the take again. Put the two takes side by side and keep the better one. Two changes at once teach nothing, because neither can be credited with the difference.

<!-- drama-craft:end -->

7. Refusals

Refusal What it means What to do
QUOTE_EXPIRED The clip quote is more than 10 minutes old quote_drama_episode again; ask again if the total changed
QUOTE_MISMATCH The clip or the drama changed after pricing Price again from the current script
REVISION_CONFLICT The drama changed while the request was in flight get_drama, then repeat
MODEL_UNAVAILABLE The clip's video model is not available right now Try later, or start the drama with another model
INVALID_ARGUMENT "no written episode" or "no scenes" Nothing to price or cut yet Write or accept a draft first
NOT_FOUND No drama, episode or draft with that id list_dramas, then get_drama
UPSTREAM_TEMPORARY Writing or the studio is briefly unavailable Retry in a few minutes; nothing was charged
ENTITLEMENT_REQUIRED The account cannot do this on its current plan Give the info_url it carries (https://aicontentdrop.com/plans) and nothing else about plans

What to hand back

The episode's video_url, the logline, the credits the writing and the clips used, and the drama's page on Drama Studio, where the person can edit a scene and render one clip again rather than the whole episode.

---

Install the plugin: https://aicontentdrop.com/plugin · All skills: https://aicontentdrop.com/skills