# Short Drama Desk > Carry one short-drama (短剧) episode through the five creator documents - script, storyboard, > video prompts - with a free browser-side checker that catches the cross-document breaks before > anything is generated. URL: https://short-drama-desk.skillsafe.ai/ ## What this is A web app for writing short-drama production documents. It does not generate video, images or audio, and it never submits a production job. It writes the Markdown documents and the prompts you take to a generator yourself. Not affiliated with or endorsed by zenstory-ai. ## The five creator documents One episode is five files, tied together by visible ids: | File | Owns | Visible ids | | --- | --- | --- | | `剧本.md` | the script | `## EP001-SC001 内 · 地点 · 时间/天气` | | `视觉设定.md` | characters, wardrobe, locations, props | named entries | | `分镜.md` | shots and freeze keyframes | `## SHOT-EP001-004` | | `图片提示词.md` | image prompt entries | `## IMG-...` | | `视频提示词.md` | motion prompts | `## MOTION-...` | ## The free part The checker needs no account, spends no credits, and runs entirely in your browser, in Chinese and English. Paste a document and it reports: - **A prompt entry claimed as an existing image.** `IMG-...` is an entry in `图片提示词.md` and does **not** mean an image was generated, supplied or is readable. `REF-...` is an actual image with a project-relative path. Writing an `IMG-` id into `输入参考图` claims a picture nobody has, and it fails at generation time on your bill. This is the rule the checker exists for. - **Text-to-video with nothing to generate from.** When `输入参考图:无`, the shot is text-to-video and the motion prompt must carry a non-empty `静态视觉锚点`. Writing `保持已有外观` or "preserve existing appearance" instead is a blocker: the execution end received no image. - **Broken links.** A `MOTION-` citing a `SHOT-` that does not exist, a shot citing a scene that does not exist, a cited `IMG-` entry that is not in the document. - **Malformed ids.** `SC001` where `EP001-SC001` is required, `SHOT-4` where `SHOT-EP001-004` is. - **Duplicate ids**, which make any reference to them ambiguous. - **Unbounded reference slots** - a `REF-` with no path, or without both `控制` and `不得控制`. - **Dirty copyable bodies** - placeholders, process notes, QA conclusions or file paths left in text that is pasted straight into a generator. - **Leaks** - absolute paths, API keys, bearer tokens or credential assignments in a deliverable. It also says what it *cannot* check yet: paste a sibling document and a whole class of finding becomes checkable rather than assumed. ## The five lanes | Lane | `task` | What it produces | | --- | --- | --- | | Source adaptation | `adapt` | Adaptation verdict, value assessment, episode map with a hook on every boundary, character ledger | | Episode script | `script` | `剧本.md` with `EP###-SC###` scene ids, a scene ledger and a hook check | | Storyboard | `board` | `分镜.md` with shot duties, freeze keyframes and both reference axes kept apart | | Video prompts | `motion` | `视频提示词.md` routed to image-to-video or text-to-video by the storyboard | | Review | `review` | Scoped review with severities, a verdict and evidence-bearing findings | ## A parsing note for anyone consuming the output Documents are returned inside a **four-backtick** ````markdown block, not three. The documents contain their own three-backtick blocks - a storyboard has a `冻结关键帧提示词` block inside every shot - so a three-backtick wrapper is closed by the first of them and the document truncates at the first shot. Parse the outer fence by backtick-run length, the way CommonMark does, rather than toggling on every ` ``` `. ## Sources Lanes are derived from https://github.com/zenstory-ai/drama-skills, an open-source MIT skill set for AI short drama and comic drama: short-drama-novel-analyze, short-drama-write, short-drama-storyboard, short-drama-video-prompts and short-drama-review. ## API Full docs with worked examples in eight languages: https://short-drama-desk.skillsafe.ai/api.html Base URL `https://api.skillsafe.ai/v1/app-api`. Bearer token from https://short-drama-desk.skillsafe.ai/tokens.html. Every run body must carry a `task` field naming the lane; the body **is** the input object and must not be wrapped in `{"input": ...}`. `GET /me` and `POST /estimate` are free; `POST /run` and `POST /run-stream` are metered. `language` and `prompt_language` are separate fields on purpose - the first governs creator-facing prose, the second the copyable prompt bodies, and neither is inferred from the other. ## Pricing Runs are metered and priced per model - `gpt-5.6-luna`, `gpt-5.6-terra` (default) or `gpt-5.6-sol`. `POST /estimate` returns the worst-case reservation for free before anything is spent. The checker and every lane's worked example cost nothing.