The user drops in a link or a file and says "add subtitles." What they want as the final product is an editable video: the media is on the timeline, it has been transcribed and polished, there is a translation when needed, and the subtitle layer sits on the video; afterward they can change a word, move a subtitle, or switch to another language in the editor, and when they want a file, export it from the video. Do not just hand over a subtitle file that was downloaded and then edited: that way they cannot edit it, and it cannot be put back onto the video.
The easiest way to get it wrong: the steps are out of order. Building the subtitle layer right after transcribing, then polishing, means the subtitle layer has to be deleted and rebuilt; translating before polishing makes all the translations outdated; starting over from scratch when continuing across turns makes the user wait twice. So follow this order throughout: confirm → create video and import → transcribe → polish (including real names of speakers) → chapters (side path) → translate → build subtitle layer → export → delivery notes. At each step, wait for the tool's receipt or task completion before going to the next step; when continuing across turns, first use videos_inspect to see which step has been reached, continue from there, and do not repeat completed steps.
1. Confirm First
Before starting, clarify these points; if anything is unclear, ask once rather than guessing along the way:
- Deliverable: original subtitles, translated subtitles, or bilingual subtitles; whether files are wanted (subtitle files, finished video with subtitles). When the user says "translate into a certain language," they want translated subtitles; when they say "bilingual," they want bilingual subtitles; when they only say transcribe or add subtitles, they want original subtitles.
- Target language: use a BCP 47 tag (e.g.,
zh-Hans、en、ja、es). If translation is wanted and the user has not said what language to translate into, ask once. - Source language, names, and terminology: note them down if the user mentions them. Give the language to transcription; give names and terminology as hints to transcription when the transcription model accepts recognition hints (see step 3), and when it does not, use them only during polishing. If no language is given, let transcription detect it automatically.
- Source metadata: for media imported from a link, the
assets[].sourcein videos_inspect contains the title, publisher, description (description, up to 1200 characters), and the author's chapters (chapters); when transcription or download finishes,pipeline.summary.descriptionandpipeline.summary.sourceChaptersalso give the description and the number of author chapters. Use it for polishing, speaker real names, and chapters. - Which video to work on: work on the video open in the editor or named by the user; use videos_inspect to see existing media, transcriptions, translations, and subtitle layers, and reuse what already exists.
- When the user explicitly wants only a subtitle file and no video or project, do not follow this workflow; follow the files section of
translate-subtitles(when only transcribing without translating, deliver the transcript in the download directory).
2. Create Video and Import
- Link: transcribe give
url(can give language, hint, name, noCaptions); it creates a new video, downloads and imports it, puts it on the timeline, transcribes it, and builds the subtitle layer; when the user has stated the source language, include language; when names and terminology are given and the transcription model accepts hints, include hint (see step 3). download givenewVideo: trueandtranscribe: trueAlso create a new video and transcribe it, but use only the default settings and do not create a subtitle track. jobs_inspect waits until completed:pipeline.summary.videoIdis the new video,pipeline.summary.assetIdis the asset. If a later step fails, keep the newly created video and do not create it again. - Local file: transcribe gives
file(you may provide language, hint, name); it creates a new video, imports it, places it on the timeline and transcribes it; the transcription in step 3 happens in this step. When you only want to create a video without transcribing, videos_create creates a new video (name taken from the file name; for portrait assets provide portrait width and height), use assets_import to import it and place it on the timeline (provide place). - If link download fails, tell the user how to remedy it according to error.details.remedy, and do not download in any other way.
3. Transcription
- In step 2, when using transcribe or download with
transcribe: trueit is already transcribing; when an existing video needs transcription, or when language or hint is needed, use transcribe with video (you may provide asset; first check models_capabilities to see whether a usable transcription service is available). - When polishing is needed, add to transcribe
noCaptions: true: the subtitle track is created by step 7 after polishing (transcribe by default creates one after transcription; any created before polishing must be deleted and recreated). - hint depends on the model: before including hint, first check in models_capabilities the transcription model you will use (the default one when model is not provided) for its
acceptsHint. The default MOSS does not accept hints: if provided, it still transcribes as usual, but the hint is ignored, and the transcription task carrieshint-ignoredas a reminder. In this case do not include hint; leave names and terms for polishing in step 4, and do not switch to a hint-accepting model just to use hint. - Transcribe once and use it: do not switch models or re-transcribe just because you feel the recognition is not good enough (transcribe's
target: replace). A few typos and misheard names and terms are normal; polishing in step 4 will fix them. Re-transcribe only when the user asks to switch models or re-transcribe, or when the result is unusable (empty, wrong language, large sections of garbled text). When the result is unusable, do not ask first; re-transcribe once directly, and if the language was misidentified include the correct language (automatic detection without it will most likely misidentify again); then tell the user where the first result was unusable, what the re-transcription changed, and how the re-transcribed result is. If it is still unusable, stop and ask the user. One re-transcription takes a few minutes, and the user is waiting. - jobs_inspect waits until completed:
pipeline.summary.documentIdis the new transcription (when transcribe is given url or download withtranscribe: true, it is likewise inpipeline.summary.documentId)。 - When CAPABILITY_NOT_CONFIGURED is returned, tell the user according to its next which service needs to be enabled, and stop here.
4. Polishing
Polish the transcription according to polish-transcript , writing back to the same transcription. By default only fix typos, terminology and punctuation, word for word, without changing word timings; skip when the user says not to polish. Polishing must come before translation: it changes sentence segmentation.
Follow its approach, using source metadata as background reference (accurate spellings of names and terms are only corrected when the speaker is clearly saying them; do not add anything to the transcript); after writing back the polished version, give placeholder-named speakers their real names (only write when there is evidence; if uncertain, keep the placeholder name). When the user says not to polish, still do the speaker real-naming.
5. Chapters (bypass)
By default, chapter the video on every transcription, unless the user says not to, or videos_inspect shows the video already has chapters (do not overwrite; when the user wants re-chaptering, follow video-chapters First ask clearly whether to replace or adjust). Chapters are a side path: they don't block translation, the subtitle layer, or export; failure is not fatal—retry at most once, and if it still fails, honestly write the reason in the delivery notes and continue with the later steps.
- Author chapters exist(
assets[].source.chaptersare not empty, orpipeline.summary.sourceChaptersis greater than 0, or the description contains0:00 开场a timestamped outline like this): use chapters_adopt on the video to absorb the author's chapters onto paragraph or sentence start points in the transcript and write them into the video; don't split them yourself;chaptersis empty but a timestamped outline is visible in the description, pass that outline tooutline. Read the receipt'ssourceChapters: how many are matched, ambiguous, and unanchored; explain at delivery. Chapters withuntitledonly have boundaries and placeholder titles (Untitled Chapter N); after titling them based on the transcription, call again withoutline; don't write placeholder names. - No author chapters(chapters_adopt returns
NO_SOURCE_CHAPTERSalso means this case and is not a failure): split them yourself following the approach invideo-chapters. - When the user wants chapters you write yourself, or wants a different granularity from the author's outline, also split them yourself following
video-chapters, using the author's outline as reference. - When it returns
ASSET_NOT_PLACED, the material is not yet on the timeline: add it to the timeline first, then proceed.
6. Translation
When a translation or bilingual output is needed, translate following the approach in translate-subtitles . After polish is written back, re-read the transcription with documents_read and translate using the translationBasis at that time; if a translation in the same language already exists, update it rather than creating a second one.
7. Build the subtitle layer
Use captions_create to place subtitles on the picture; BaoCut aligns them to sentences by time and splits them into subtitle strips by width:
- Source-language subtitles: give the transcription document as documentId.
- Translated subtitles: give the translation document as documentId.
- Bilingual subtitles: give the translation document and include
bilingual: true。
Each call on the same document creates an additional layer; it does not overwrite. Before calling, use videos_inspect to check whether this document already has a subtitle layer: if it does, don't create another; if the user wants it redone, first explain that an extra layer will be created and ask whether to delete the old one. The receipt gives a transactionId and the number of subtitle strips; tell the user.
8. Export
When the user wants a file, use export, wait for jobs_inspect to reach completed, and tell the user the path in outputs:
- Bilingual subtitle file: kind
subtitles,bilingual: true(the primary document is the transcription, the secondary document is the translation, one entry per sentence). - A subtitle file with only the translation: kind
subtitles, provide language; this requires that a subtitle layer in that language already exists on the picture (step 7). - Source-language subtitle file: kind
subtitles, the primary document is the transcription. - Finished video with subtitles: export mp4 or webm; the subtitle layer on the picture will be rendered into it.
9. Things to avoid
- Don't deliver only a subtitle file unless the user explicitly wants only the file.
- Don't build the subtitle layer before polishing; don't translate before polishing.
- Don't re-transcribe just because you think the recognition isn't good enough; don't switch models just to use the hint.
- Don't repeatedly create subtitle layers on the same document; don't rebuild a video that has already been created.
- Across turns, don't start over: first use videos_inspect to see how far it got.
- If chapters fail, don't retry repeatedly, and don't let it block later steps.
10. Delivery notes
Written for the user, making clear what they got and where they need to look for themselves:
- Where the video is: its name and location; whether it is newly created or the user's original.
- Subtitle layers: which layers were created (original text, translation, bilingual), and how many entries each has.
- File: the export path.
- What the polish changed and which terms were standardized; the target language of the translation and the number of sentences.
- Speakers: who was given a real name; which ones have no evidence and are still placeholder names.
- Chapters: how many chapters; whether the author's chapters were used or they were divided independently; entries in the author's chapters that did not match (ambiguous, unanchored); if not done or failed, explain why.
- Where things are uncertain: transcription errors that were not fixed, translations that are uncertain, and passages with poor recognition quality.