Skip to content

Messages and error codes

Generated by python3 scripts/gen_messages_md.py from lib/vstudio/messages.py (do not edit by hand; tests/test_messages.py fails when this file is out of date).

Every engine text a person reads comes with a stable code and params, next to the English message and Chinese message_zh the CLI and older desks show:

{"code": "qc.loudness", "params": {"value": -9.1, "lufs": -14, ...}, "message": "...", "message_zh": "..."}

The desk maps code to its own copy (en / zh-CN / fr below; {name} = a param) and falls back to message / message_zh for a code it does not know. Codes whose text is {text} carry engine or model text through as is (params.text): show it, do not translate it.

Output Field
vstudio.llm errors (--json of plan-segments, output ai, project ai) code, tried, errors, codes, attempts, message (llm-all-failed)
llm auth status rows message (auth-*, key-*, local-*; see vstudio.llm_auth.MSG)
plan-segments notices[] (plan-*), fallback
intake plan risks_info[], warnings_info[], questions[].message, projects[].checkpoints[].label_info, projects[].recipe_info, planner.message, summary_info
inbox entries label_info (checkpoint.<kind>), reason (inbox.<kind>)
project status state_info (project-state.*), items[].state_info (job-state.*), items[].qc_info (qc-state.*), items[].stages[].label_info (stage.*)
QC (qc.json, job detail) checks[].message, reasons_info[], warnings_info[] (qc.<check>)
.vstudio/status.json status_info (status.*), stage_info (stage.*), message_info (status-text or the writer’s message_code)
publishing calendar posts[].state_info, states (post-state.*)
output ai / project ai summary_info, groups[].summary_info, groups[].proposed[].why_info (ai-summary, ai-why); errors and notes already carry code + params (vstudio.project.outputs.msg)
recipes (vstudio.project recipes --json, project show) messages.label, messages.description (recipe.<id>.label, recipe.<id>.description: the manifest’s own zh / en texts)
Code en zh-CN fr
llm-all-failed Every AI provider failed ({providers}) 所有 AI 模型都失败了({providers}) Tous les fournisseurs d’IA ont échoué ({providers})
llm-fallback {frm} failed ({why}); {to} answered instead {frm} 没成功({why}),改用了 {to} {frm} a échoué ({why}) ; {to} a répondu à la place
plan-fallback {frm} failed ({why}); the segments were planned by {to} {frm} 没成功({why}),这次由 {to} 规划切片 {frm} a échoué ({why}) ; les extraits ont été choisis par {to}
plan-segments-failed Planning the segments failed ({providers}): {error} 切片规划失败({providers}):{error} Le choix des extraits a échoué ({providers}) : {error}
plan-short-filled {provider} returned {n} usable segment(s); {missing} filled by the rule-based ranking {provider} 只给出 {n} 条可用切片,另外 {missing} 条由规则补上 {provider} a donné {n} extrait(s) utilisable(s) ; {missing} complété(s) par les règles
plan-title-too-long {id}: {provider} title over {limit}: {title} {id}:{provider} 给的标题超过 {limit} 字:{title} {id} : titre de {provider} au-delà de {limit} : {title}
intake.risk.no-source {recipe}: no long recording or screen recording to cut {recipe}: 没有找到可切的长录音/录屏 {recipe} : aucun long enregistrement ou enregistrement d’écran à découper
intake.risk.burned-longform {file} has burned-in captions: vertical slices add a new caption layer; check after picking the segments {file} 已有烧录字幕:竖屏切片会再叠一层新字幕,建议在选段后检查 {file} a des sous-titres incrustés : les extraits verticaux ajoutent une nouvelle couche ; vérifiez après le choix des extraits
intake.risk.no-video {recipe}: no video material found {recipe}: 没有找到视频素材 {recipe} : aucune vidéo trouvée
intake.risk.no-photos {recipe}: no photos or videos found {recipe}: 没有找到照片或视频 {recipe} : aucune photo ni vidéo trouvée
intake.risk.aigc-credits AI video is paid in credits: it stops at the budget checkpoint for your approval before generating AI 视频按积分计费:生成前会在“预算”检查点停下等你批准 La vidéo IA se paie en crédits : elle s’arrête au point de contrôle du budget pour votre accord avant de générer
intake.risk.unsupported-platform {platforms}: no export preset yet; exported for the closest platform {platforms} 还没有导出预设:先按最接近的平台导出 {platforms} : pas encore de préréglage d’export ; exporté pour la plateforme la plus proche
intake.risk.no-projects No runnable project could be made from these materials and the request 没能从这些素材和描述里拼出可执行的项目 Impossible de composer un projet à partir de ces fichiers et de cette demande
intake.question.mask-faces Whose faces should be hidden? (default: every guest but you) 要遮哪几位的脸?(默认:除你以外的所有嘉宾) Quels visages masquer ? (par défaut : tous les invités sauf vous)
intake.question.narration Narration (AI voice reads your copy) or music only? 文艺片要旁白(AI 配音读你的文案)还是纯音乐卡点? Narration (voix IA qui lit votre texte) ou musique seule ?
intake.question {text} {text} {text}
intake.risk {text} {text} {text}
intake.warning {text} {text} {text}
intake.warning.unknown-recipe Dropped a sub-project with the unknown recipe {recipe} (only catalog recipes run) 去掉了一个未知配方 {recipe} 的子项目(只运行目录里的配方) Sous-projet à la recette inconnue {recipe} retiré (seules les recettes du catalogue s’exécutent)
intake.warning.batch-recipe The batch recipe is an engine board; use the deliverable recipe instead (dropped) batch 是引擎看板,不是成品配方(已去掉) La recette batch est un tableau du moteur ; utilisez la recette du livrable (retiré)
intake.warning.unknown-input {project} {recipe}: unknown input {key} dropped {project} {recipe}:未知输入 {key} 已去掉 {project} {recipe} : entrée inconnue {key} retirée
intake.warning.input-not-accepted {project} {recipe}: input {key} does not accept {files} {project} {recipe}:输入 {key} 不接受 {files} {project} {recipe} : l’entrée {key} n’accepte pas {files}
intake.warning.input-single {project} {recipe}: input {key} takes one file; kept {file} {project} {recipe}:输入 {key} 只要一个文件,保留了 {file} {project} {recipe} : l’entrée {key} prend un seul fichier ; {file} gardé
intake.warning.range-dropped {project} row {row}: range {range} too short or outside the media, dropped {project} 第 {row} 行:区间 {range} 太短或超出素材,已去掉 {project} ligne {row} : plage {range} trop courte ou hors du média, retirée
intake.warning.unknown-param {project} {recipe}: unknown param {key} dropped {project} {recipe}:未知参数 {key} 已去掉 {project} {recipe} : paramètre inconnu {key} retiré
intake.warning.platform-unsupported {project} {recipe}: platform {platform} not supported by this recipe (dropped) {project} {recipe}:这个配方不支持平台 {platform}(已去掉) {project} {recipe} : plateforme {platform} non prise en charge par cette recette (retirée)
intake.warning.param-invalid {project} {recipe}: param {key}={value} invalid for the recipe (reset to default) {project} {recipe}:参数 {key}={value} 不合法(已恢复默认) {project} {recipe} : paramètre {key}={value} invalide (valeur par défaut rétablie)
intake.warning.required-input-missing {project} {recipe}: required input {key} has no material (sub-project dropped) {project} {recipe}:必需的输入 {key} 没有素材(子项目已去掉) {project} {recipe} : l’entrée requise {key} n’a pas de fichier (sous-projet retiré)
intake.warning.focus-unmatched {project}: no transcript passage matched the focus; ranges will be chosen at the segments step {project}:逐字稿里没找到对应内容,选段步骤再定区间 {project} : aucun passage de la transcription ne correspond ; les plages seront choisies à l’étape des extraits
intake.warning.revise-not-understood Did not understand this change: {instruction} (plan unchanged) 没看懂这条修改:{instruction}(计划未变) Modification non comprise : {instruction} (plan inchangé)
intake.warning.schema Plan schema: {error} 计划格式问题:{error} Schéma du plan : {error}
intake-burned-subs The video already has captions burned in: the old captions are cropped off and new ones go in a band 视频里已经有烧录字幕:裁掉旧字幕,新字幕放在字幕条里 La vidéo a déjà des sous-titres incrustés : ils sont rognés et les nouveaux vont dans une bande
intake-no-model No AI model is set up for planning: the rule planner made this plan 没有配置 AI 规划模型,这份计划由规则生成 Aucun modèle d’IA n’est configuré pour la planification : ce plan vient des règles
intake-rule-plan The AI plan was not usable ({reason}): the rule planner made this plan AI 给的计划不可用({reason}),这份计划由规则生成 Le plan de l’IA n’était pas utilisable ({reason}) : ce plan vient des règles
intake.summary {text} {text} {text}
intake-model-fallback The AI planner was not available ({reason}): the rule planner made this plan AI 规划没成功({reason}),这份计划由规则生成 Le planificateur IA n’était pas disponible ({reason}) : ce plan vient des règles
ai-summary {text} {text} {text}
ai-why {text} {text} {text}
status-text {text} {text} {text}
qc.other {name}: {reason} {name}:{reason} {name} : {reason}
stage.plan Planning 规划中 Planification
stage.probe Reading the file 读取文件 Lecture du fichier
stage.extract Extracting audio 提取音频 Extraction de l’audio
stage.asr Transcribing 语音转文字 Transcription
stage.hooks Finding hooks 找开场 Recherche d’accroches
stage.cleanup Finding pauses and fillers 找气口和口癖 Recherche des pauses et tics
stage.apply Cutting 剪辑中 Découpe
stage.face Tracking the face 跟踪人脸 Suivi du visage
stage.compose Composing 合成中 Composition
stage.cover_frames Cover candidates 封面候选 Couvertures candidates
stage.verify Checking the cut by ear 回听检查 Vérification à l’écoute
stage.glossary Building the glossary 整理术语表 Glossaire
stage.proofread Proofreading captions 校对字幕 Relecture des sous-titres
stage.export Exporting 导出中 Export
stage.qc Quality check 质量检查 Contrôle qualité
stage.preview Preview 预览 Aperçu
stage.render Rendering 渲染中 Rendu
stage.geometry Finding the screen 识别屏幕区域 Détection de l’écran
stage.package Packaging 打包中 Empaquetage
stage.segments Picking segments 选段中 Choix des extraits
stage.ai Asking the AI AI 处理中 Demande à l’IA
stage.ask Asking the AI AI 处理中 Demande à l’IA
stage.read Reading the outputs 读取成片 Lecture des vidéos
stage.check Checking 检查中 Vérification
stage.other {stage} {stage} {stage}
status.running Running 进行中 En cours
status.waiting Needs you 需要你 À vous de jouer
status.done Done 已完成 Terminé
status.failed Failed 失败 Échec
status.interrupted Interrupted 已中断 Interrompu
checkpoint.filler-confirm Confirm filler cuts 确认去 filler Confirmer les coupes de tics
inbox.filler-confirm Filler cuts need your yes 有口癖剪辑等你确认 Des coupes de tics attendent votre accord
checkpoint.hook-pick Pick the hook 选 hook Choisir l’accroche
inbox.hook-pick Pick the cold open 从候选里选开场 Choisissez l’ouverture
checkpoint.segment-approval Approve the segments 确认选段 Valider les extraits
inbox.segment-approval Check the proposed segments 看一下选段 Vérifiez les extraits proposés
checkpoint.script-lock Lock the script 锁定剧本 Verrouiller le script
inbox.script-lock Lock the script before generating 生成前先锁定剧本 Verrouillez le script avant la génération
checkpoint.storyboard-approval Approve the storyboard 确认分镜 Valider le storyboard
inbox.storyboard-approval Check the storyboard 看一下分镜 Vérifiez le storyboard
checkpoint.budget-approval Approve the budget 批准预算 Valider le budget
inbox.budget-approval Approve the spend before anything paid runs 付费生成前请批准预算 Validez la dépense avant toute génération payante
checkpoint.take-selection Pick the takes 选镜头 Choisir les prises
inbox.take-selection Pick the takes to use 选要用的镜头 Choisissez les prises à utiliser
checkpoint.cover-pick Pick the cover 选封面 Choisir la couverture
inbox.cover-pick Pick a cover 从候选里选封面 Choisissez une couverture
checkpoint.privacy-masks Check the privacy masks 检查打码 Vérifier les masques
inbox.privacy-masks Check who is masked 确认打码的人和区域 Vérifiez qui est masqué
checkpoint.consent Confirm consent 确认授权 Confirmer le consentement
inbox.consent Confirm the people shown agreed 确认出镜的人已同意 Confirmez l’accord des personnes filmées
checkpoint.publish Review before publishing 发布前确认 Relire avant publication
inbox.publish Review the post before it goes out 发布前看一眼 Relisez la publication avant l’envoi
checkpoint.author Write or approve the text 写 / 确认文字 Écrire ou valider le texte
inbox.author Write or approve the text 写或确认文字 Écrivez ou validez le texte
checkpoint.music-pick Pick the music 选音乐 Choisir la musique
inbox.music-pick Pick the music 选配乐 Choisissez la musique
checkpoint.voice-pick Pick the voice 选声音 Choisir la voix
inbox.voice-pick Pick the voice 选配音 Choisissez la voix
checkpoint.media-selection Pick the media 选素材 Choisir les médias
inbox.media-selection Pick the media to use 选要用的素材 Choisissez les médias à utiliser
checkpoint.review Review 审片 Relecture
inbox.review Review the result 看一下成片 Regardez le résultat
job-state.planned To do 待做 À faire
job-state.running Running 进行中 En cours
job-state.waiting Needs you 需要你 À vous de jouer
job-state.done Done 已完成 Terminé
job-state.failed Failed 失败 Échec
job-state.interrupted Interrupted 已中断 Interrompu
job-state.packaged Packaged 已打包 Empaqueté
job-state.skipped Skipped 已跳过 Ignoré
job-state.unverified Not checked yet 未验证 Pas encore vérifié
job-state.approved Approved 已通过 Validé
job-state.rejected Rejected 已退回 Refusé
project-state.new New 新建 Nouveau
project-state.planned To do 待做 À faire
project-state.running Running 进行中 En cours
project-state.needs-you Needs you 需要你 À vous de jouer
project-state.error Failed 失败 Échec
project-state.paused Paused 已暂停 En pause
project-state.interrupted Interrupted 已中断 Interrompu
project-state.done Done 已完成 Terminé
qc-state.green Checks passed 检查通过 Contrôles réussis
qc-state.red Checks failed 检查没通过 Contrôles échoués
qc-state.none Not checked yet 未验证 Pas encore vérifié
post-state.planned Planned 计划中 Prévu
post-state.approved Approved 已确认 Validé
post-state.scheduled Scheduled 已排期 Programmé
post-state.posted Posted 已发布 Publié
post-state.skipped Skipped 已跳过 Ignoré
qc.loudness Loudness {value} LUFS (target {lufs}) 响度 {value} LUFS(目标 {lufs}) Volume {value} LUFS (cible {lufs})
qc.true-peak True peak {value} dBTP over {tp} 真峰值 {value} dBTP,超过 {tp} Crête {value} dBTP au-dessus de {tp}
qc.av-sync Sound and picture drift by {value} s 音画差 {value} 秒 Décalage son / image de {value} s
qc.black-frames Black frames at {spans} {spans} 有黑帧 Images noires à {spans}
qc.frozen-frames Frozen picture at {spans} {spans} 画面卡住 Image figée à {spans}
qc.length Length {value} s: {reason} 时长 {value} 秒:{reason} Durée {value} s : {reason}
qc.length-sweet-spot Length {value} s is outside the sweet spot 时长 {value} 秒不在最佳区间 Durée {value} s hors de la zone idéale
qc.length-plan Too long for the platform: {reason} 比平台建议时长长:{reason} Trop long pour la plateforme : {reason}
qc.max-len {value} s over the max length {value} 秒超过最长限制 {value} s au-delà de la durée maximale
qc.title Title too long for {platform} 标题超过 {platform} 的长度限制 Titre trop long pour {platform}
qc.canvas Wrong canvas size {value} 画布尺寸不对 {value} Mauvaise taille de canevas {value}
qc.safe-zone Captions outside the safe zone 字幕超出安全区 Sous-titres hors de la zone sûre
qc.caption-hallucination {value} invented caption line(s) 有 {value} 行字幕是识别瞎编的 {value} ligne(s) de sous-titres inventée(s)
qc.lost-words {value} word(s) lost in the cut 剪掉了 {value} 个词 {value} mot(s) perdu(s) à la coupe
qc.exports No exports 没有导出文件 Aucun export
qc.caption-edit-missed {value} caption edit(s) could not be applied {value} 处字幕修改没能应用 {value} correction(s) de sous-titres non appliquée(s)
qc.export-warning Export warning: {reason} 导出提醒:{reason} Avertissement d’export : {reason}
qc.privacy Privacy check: {reason} 隐私检查:{reason} Contrôle de confidentialité : {reason}

Code families with an id (texts come from the recipe manifest):

  • recipe.<id>.label
  • recipe.<id>.description