This skill is only responsible for safely delivering already-written production specifications to the adapter configured in the runtime environment. Image prompts still belong to
$short-drama-image-prompts, video prompts belong to $short-drama-video-prompts, lines and the recording table belong to
$short-drama-write, voice identities belong to $short-drama-assets。
Quick Start
Only after the user explicitly requests actual generation, from the current 图片提示词.md、分镜.md or 视频提示词.md extract this round's prompt and establish a bounded run job. For a creator-first job, source must point to the
current Markdown that owns this prompt,source_entry must name the second-level headings allowed by that document:图片提示词.md use IMG-*,
视频提示词.md use MOTION-*,分镜.md use SHOT-*(modality is image, body takes that shot's
### 冻结关键帧提示词). This selector only extracts the first frame; the last frame must first be established by the image prompt stage as an independent IMG-* state image entry,
then prepare an image job from 图片提示词.md . The creator may also provide an existing starting frame—
generating the image in their own tool and then putting it into the project is equally valid; when images never enter the project, use the storyboard's PLAN-...;
after the output lands in 剧集/<EP>/制作成果/images/ , the storyboard owner can then bind it as 用途:起始帧 's REF-.... When real reference images exist,
you must also fill in each one's slot, order, path, Chinese name, purpose, and allowed/forbidden control scope in reference_bindings ;
the built-in video adapter reads the 用途 field here as the vendor's own role, accepting only the values it publishes
(MiniMax is first_frame/last_frame/reference_image/reference_video/reference_audio,
Seedance is three reference_*); a job with reference images but no binding fails directly, and no role is guessed for it.
Local images are sent directly by the built-in adapter as base64 data URIs, with no need to build your own upload service.
MOTION-* 's "Reference Audio" lines likewise each go into reference_bindings, placed after the images, with role fixed as reference_audio、character copying that line's 角色;
when the adapter profile does not declare acceptance of reference_audio , run fails before submission, see
adapter-contract.md. When an entry's "Input Reference Image" is written as PLAN-... , those images are in the creator's own tool, and there is no file in the project to send:
prepare fails directly and explains to first put the real file into the project and rewrite it as REF-..., not treating the plan as input, nor silently dropping the reference.
references may be omitted and generated from the binding order, or may be an explicit mirror of the same order. Output goes in
剧集/<EP>/制作成果/; this job is a temporary input for the production tool, not a sixth creative document:
python3 {技能目录}/scripts/production_tool.py prepare <project> --job <临时-job.json>
First show the full preview of prepare ; at this time the vendor is not called.
Hard gate
Every production must go through the following four steps, and the order cannot be merged:
- Establish a bounded job: one modality, clear quantity, complete prompt/spec, reference files, parameters, output path, and adapter profile.
- Run
prepare, present the returned full preview to the creator, especially the count, prompt, source entry, reference bindings, references, outputs, overwrite, and adapter. The creator-first job will mechanically verify at this step the copyable prompts in the selected titles, as well as the reference image slots, order, paths, Chinese names, and control boundaries; any drift fails closed. - after the creatorsees this previewexplicitly confirms. Only with explicit consent for this current task should you run
confirm; "continue", "finish it all", "the budget is fine", upstream content having been accepted, or a previous confirmation of another version do not count as confirmation for this production run. - run
run. It consumes one confirmation before starting the adapter; after success or failure, executing it again must require re-confirmation, to prevent a failed retry from accidentally incurring a second charge.
Any change to the job, prompt, parameters, output path, or direct input immediately invalidates the old confirmation. Do not fill in confirmation on behalf of the creator. The currently confirmed job is the only unit of work for this round; after the run ends, report the result and hand back control, without automatically preparing the next batch or starting a review.
分镜.md 's "input reference image" paths are only readable evidence and usage intent at the creation stage, not a production input snapshot. When entering production,
the creator-first job must establish bindings from the corresponding entries in 图片提示词.md or 视频提示词.md ;prepare what is shown by
reference_bindings、references and the confirmed job are the authority for which file bytes this adapter actually reads and what each is allowed
to affect. Non-creator structured specifications may leave source_entry/reference_bindingsempty and continue using only explicit
references; but for a new image/video job, as long as source points to canonical 图片提示词.md or
视频提示词.md , the corresponding selector is mandatory and must not be bypassed by downgrading through omitted fields. Old jobs already prepared and persisted
before the upgrade can still be read according to their original fingerprint.
New production results are not automatically backfilled into or used to refresh the storyboard; when such a result needs to become subsequent input, the storyboard owner revises the document, then creates a new job
and previews and confirms it again.
command
Only after entering the production boundary, write the current prompt and run parameters as temporary JSON; for video and image jobs, the
parameters.prompt_language follows the prompt language already parsed from the current copyable body, so that reference constraints appended by the adapter
use the same language rather than falling back to fixed English. Do not pre-create a job for each prompt during the creation stage.
For the format and adapter contract, see
adapter-contract.md. The command is provided by
production_tool.py , then run:
python3 <本技能目录>/scripts/production_tool.py prepare <project> --job <job.json>
python3 <本技能目录>/scripts/production_tool.py confirm <project> --job-id <id> --confirmation "CONFIRM <id> <code>"
python3 <本技能目录>/scripts/production_tool.py run <project> --job-id <id> --adapter-config <outside-project-config.json>
python3 <本技能目录>/scripts/production_tool.py status <project> --job-id <id>
python3 <本技能目录>/scripts/production_tool.py collect <project> --job-id <id> --adapter-config <outside-project-config.json>
python3 <本技能目录>/scripts/production_tool.py audit <project>
prepare only validates and previews, without producing.confirm only saves a one-time confirmation bound to the current job fingerprint.
run starts the adapter.collect only retrieves the result of that task whichhas already submitted and already been billed for,
without resubmitting and without needing a new confirmation—see "interruption does not mean rerun" below.audit only reconciles local task history, post-failure recovery, duplicate content attempts, and the current output bytes,
does not call the vendor, and does not write technical success, file existence, or hash consistency as a conclusion about media quality. When the same job has an unresolved
running attempt, re-preparing, confirming, or running is prohibited; first wait for completion or investigate the leftover attempt.
input selection
- image: read
图片提示词.md's currentIMG-*copyable body, or分镜.md's currentSHOT-*Freeze the keyframe body, add the necessary reference images and explicit output size/count; for creator-first jobs usesource_entryLock this one. The asset board goes throughIMG-*, and the start frame of a certain shot goes throughSHOT-*; the two do not substitute for each other. - video: read the current
视频提示词.mdofMOTION-*to copy the body, and verify the corresponding shot, keyframe, duration, and aspect ratio in分镜.md; for creator-first jobs usesource_entryto lock this one. When a continuous segment chooses to continue from the previous segment's generated result, the next segment's job simultaneously binds the previous segment's actual video and the actual tail frame taken from that video, and preserves the different responsibilities ofcontinuity_video、actual_tail_frame; provider roles are translated by the target model adapter. This group of inputs for H3 is uniformly translated asreference_video + reference_image, and must not be mixed intoreference_video + first_frame; do not replace real files with planned tail frames or text descriptions. - tts: read the original line and performance requirements from
剧本.md; the voice reference is explicitly provided by the user or existing media. Do not change the words in a production job, and do not create a sixth creative document for TTS. Performance requirements come from this line's parenthetical notes and context: when the execution end accepts natural-language tone, write a tone description before the line ("Suppressing it, lowering the voice, and answering through gritted teeth: Yes."), and attach the same reference timbre to each line of the same character; when it only accepts enumerated emotions, map to the nearest option, then fine-tune with intensity and pitch. When only timbre is given and no tone, short-drama lines will be read in a broadcast-announcer tone. - music: read the creator-confirmed timeline music sections in
视频提示词.md; the theme song uses confirmed lyrics, and pure score carries no lyrics. When the provider cannot precisely promise duration, after generating the source audio track,$short-drama-editstill completes placement, looping, fade in/out, and dialogue ducking according to the mixing intent in the document.
One job does not mix modalities. Large batches of work are split into small jobs whose quantity and cost boundaries the creator can clearly see; do not implicitly stuff an entire season into one confirmation for convenience.
Adapter Boundaries
The adapter configuration must be outside the project and contain only the argv command and timeout; credentials are read by the adapter itself from the process environment or system credential storage. Project jobs, confirmation records, run records, and the Dashboard must not store keys.
The script invokes the argv array with JSON stdin, does not use a shell, and does not concatenate commands. The adapter returns a local temporary file; the tool only
accepts results exactly consistent with the confirmed targets, and atomically copies the complete file into the project's 剧集/<EP>/制作成果/
directory. The project and upstream Skill do not hard-code providers, models, or APIs that are about to change.
Based on the confirmed reference_bindings, the built-in image/video compiler appends a deterministic
reference semantics description to the provider prompt in order (Chinese name, purpose, allowed control and scope not to be controlled); it will not mistake slot names for text to be rendered into the image.
External adapters must also preserve this set of semantics or explicitly refuse; they cannot merely upload files and silently lose the control boundaries.
This skill optionally provides four stdlib adapters, all selected through an adapter config outside the project, with credentials read only from the runtime environment:
- Seedance: the model/Endpoint ID must be explicitly configured by the account; the compiler supports official image, video, and audio reference roles, and the built-in runtime still refuses local reference files when trusted upload is not configured.
- GPT Image 2: with no reference image, use generation; with a reference image, use edit; fix high-fidelity references and verify size, format, and transparent-background restrictions.
- MiniMax Music: use
music-3.0and hex results, distinguishing theme songs from pure score, and does not forge duration request fields. - MiniMax speech:
ttsmodality; the model andvoice_idmust both be explicitly given by the account and documentation, with no built-in voice list. Synthesize only from preset voices, do no voice cloning—cloning is a licensing matter, and reference recordings authorized by the creator go through ordinary creator input as输入/。 - MiniMax H3 video: the model ID, resolution set, and duration range must
be explicitly configured by the account; prompts go into the
contenttext item, reference images are bound by explicit role, and local references fail closed when there is no trusted upload. This model generates sound in the same pass as the picture; for how the wording affects it, see the target model capability profile in the video prompt skill.
These adapters are verified request contracts, not guarantees of account availability or generation quality; formal production must still pass through the above per-run confirmation gate, and the reviewing Skill judges artifact quality.
The repository's built-in fixture_adapter.py is only for offline testing and does not represent real generation quality or a default production adapter.
An interruption does not mean you have to rerun
Video tasks are billed atthe moment of submission, not when the result is obtained. Everything after submission—polling for a few minutes, downloading—
can be interrupted by the process being killed, a network outage, or the machine going to sleep. The built-in adapter therefore writes the provider task ID into handle_paththe first moment it gets it
(earlier than the first poll), and this path is not deleted along with this attempt.
So after an interruption there are three definite actions, with no need to pay again:
auditwill report the incomplete attempt carrying the task ID asorphaned_provider_job,actioniscollect_before_retry;collectuses that ID to retrieve the result and mark this attempt as successful;- Only after
collectalso confirms that the other side has indeed failed do you take the old path of reconfirming and resubmitting.
Do not, when audit reports orphaned_provider_job , directly resubmit—that is paying a second time for the same shot.
collect Not going through the confirmation gate is intentional: the gate guards against accidental spending, and collect does not spend;
if it also required reconfirmation, then after an interruption the least troublesome path would become paying again, which is exactly what the gate is meant to prevent.
Results and review
On success, report the actual output path, media type, and run status; do not write "the adapter returned success" as a quality conclusion.
After multiple tasks or retries, first run audit: final-state failures are routed by retryable , and retries still require a new explicit confirmation; when output is missing or
the file's hash or size no longer equals the run record, first review the current bytes or regenerate.repeated_content is only a cost and diagnostic signal,
and cannot automatically determine whether retrying the same text is reasonable or not;running_attempt is a pending operational state; audit must return attention.
Failures are handled along three paths. Technical failures such as timeouts, rate limiting, and server errors may be retried with a cap. If the failure message names which input was rejected—the prompt text, reference image, or audio—first change that item and then resubmit: if the text is rejected, rewrite that sentence, replacing "a punch slams into the other person's face, blood dripping down their chin" with "a punch misses, the other person dodges sideways, and the cup on the table is knocked over"; if the reference image is rejected, replace it with one whose composition matches the character and whose image itself is compliant; if the audio is rejected, re-record that line. Write the change into a new job and prepare it again, so the creator can see in the preview which item was changed before confirming; a confirmation that resubmits unchanged produces no fix, only a charge. Repeated-content defects go back to the corresponding prompt/spec owner.
After production ends, it does not automatically enter editing. When the materials need to be assembled into a final video, the user names $short-drama-edit; it only selects among existing frames,
does not go back and change the job in this stage, and does not generate new materials.
If quality review is needed, the report can hand the existing results separately to $short-drama-review; do not automatically start review during production calls.
The Dashboard is only responsible for displaying these files and run summaries, and does not provide adapter settings or production buttons.
Installation and Maintenance
Run offline self-checks only during installation, upgrade, or troubleshooting; do not run them for ordinary creation and production preparation:
python3 scripts/selftest.py
python3 scripts/provider_adapters.py --selftest