feat: bootstrap commercial AI drama platform
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# 项目工程目录模板
|
||||
|
||||
每个正式剧集项目可复制本目录结构:
|
||||
|
||||
```text
|
||||
bible/ series bible、世界观、季纲、集纲
|
||||
characters/ 角色锁、服装状态、声音锁、参考图
|
||||
locations/ 场景锁、固定机位、天气与灯光状态
|
||||
props/ 道具锁、关键物状态
|
||||
shots/ 分镜 JSON、prompt pack、首尾帧、视频片段
|
||||
voices/ 台词表、TTS wav、角色参考音频
|
||||
qa/ 单画面、连续性、声音字幕、片段衔接质检结果
|
||||
edit/ 剪辑清单、字幕、音轨、转场说明
|
||||
final-video/ 最终成片与发布版本
|
||||
```
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "thunder-mouth",
|
||||
"title": "雷雨口",
|
||||
"format": "竖屏 AI 漫剧",
|
||||
"logline": "暴雨夜,冷静的地铁口志愿者和急着回家的女学生,用三段避险选择逃过一次雷暴事故。",
|
||||
"originalityNote": "原创灾害安全短剧;只参考短剧节奏和本地生成工艺,不复制现成 IP、角色或名场面。",
|
||||
"visualStyle": "原创国产漫画/国漫 2D 动画风格,竖屏 9:16,干净赛璐璐上色,电影感中景,傍晚雷雨,稳定侧向中远景机位。",
|
||||
"showEngine": "每集一个日常危险现场,角色用具体行动拆解风险,结尾留下下一处隐患。",
|
||||
"continuityRule": "角色、服装、道具、场景、天气、机位、声音全部入 ledger;下一段视频优先使用上一段实际末帧。"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
[
|
||||
{
|
||||
"id": "chen-yu",
|
||||
"name": "陈宇",
|
||||
"role": "青年志愿者",
|
||||
"visualLock": "23岁中国青年,短黑发,深青色连帽雨衣,黑色双肩包,折叠蓝伞低握,表情冷静,站姿克制。",
|
||||
"costumeState": "深青色雨衣始终半湿,背包不离身,蓝伞未打开。",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-male-calm-chenyu-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "青年男声,普通话,中低音,镇定,不播音腔",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
},
|
||||
"casting": {
|
||||
"baseLook": "定妆照待生成",
|
||||
"turnarounds": [
|
||||
"正面",
|
||||
"侧面",
|
||||
"背面"
|
||||
],
|
||||
"wardrobe": [
|
||||
"雨衣常服",
|
||||
"室内干燥版",
|
||||
"后续志愿者马甲"
|
||||
],
|
||||
"reuseScope": "S01 全季"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "tang-xia",
|
||||
"name": "唐夏",
|
||||
"role": "高中女生",
|
||||
"visualLock": "16岁中国女生,黑色马尾,蓝白校服运动套装,小号海军蓝背包,黄色雨披折在双臂上。",
|
||||
"costumeState": "校服袖口被雨打湿,黄色雨披只抱在手里不穿上。",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-girl-natural-tangxia-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "少女普通话,自然干净,不娃娃音,不尖锐",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
},
|
||||
"casting": {
|
||||
"baseLook": "定妆照待生成",
|
||||
"turnarounds": [
|
||||
"正面",
|
||||
"侧面",
|
||||
"背面"
|
||||
],
|
||||
"wardrobe": [
|
||||
"校服湿袖版",
|
||||
"雨披展开版",
|
||||
"室内等待版"
|
||||
],
|
||||
"reuseScope": "S01 前 6 集"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"schema": "ai-drama-platform.edit-list.v1",
|
||||
"episodeId": "E01",
|
||||
"frameRate": 24,
|
||||
"clips": [
|
||||
{
|
||||
"order": 1,
|
||||
"shotId": "shot-01",
|
||||
"sourceVideo": "shots/shot-01/shot-01.mp4",
|
||||
"durationSec": 6,
|
||||
"audioTracks": [
|
||||
"voices/chen_yu/line_001.wav",
|
||||
"voices/tang_xia/line_002.wav"
|
||||
],
|
||||
"subtitleSource": "voices/shot-01.srt",
|
||||
"transition": "insert-bridge-shot",
|
||||
"qaRequiredBeforeEdit": [
|
||||
"single-frame",
|
||||
"continuity-lock",
|
||||
"voice-subtitle-asr",
|
||||
"clip-bridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"shotId": "shot-02",
|
||||
"sourceVideo": "shots/shot-02/shot-02.mp4",
|
||||
"durationSec": 6,
|
||||
"audioTracks": [
|
||||
"voices/chen_yu/line_003.wav",
|
||||
"voices/tang_xia/line_004.wav"
|
||||
],
|
||||
"subtitleSource": "voices/shot-02.srt",
|
||||
"transition": "match-last-frame",
|
||||
"qaRequiredBeforeEdit": [
|
||||
"single-frame",
|
||||
"continuity-lock",
|
||||
"voice-subtitle-asr",
|
||||
"clip-bridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"shotId": "shot-03",
|
||||
"sourceVideo": "shots/shot-03/shot-03.mp4",
|
||||
"durationSec": 6,
|
||||
"audioTracks": [
|
||||
"voices/tang_xia/line_005.wav",
|
||||
"voices/chen_yu/line_006.wav"
|
||||
],
|
||||
"subtitleSource": "voices/shot-03.srt",
|
||||
"transition": "match-last-frame",
|
||||
"qaRequiredBeforeEdit": [
|
||||
"single-frame",
|
||||
"continuity-lock",
|
||||
"voice-subtitle-asr",
|
||||
"clip-bridge"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"schema": "ai-drama-platform.delivery-manifest.v1",
|
||||
"episodeId": "E01",
|
||||
"expectedFinal": "final-video/E01_别往树下跑_master.mp4",
|
||||
"sourceEditList": "edit/edit-list.json",
|
||||
"subtitles": "edit/E01_别往树下跑.zh-CN.srt",
|
||||
"audioPolicy": "固定 TTS 声线替换随机原生音轨;环境声可独立保留。"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
[
|
||||
{
|
||||
"id": "metro-canopy-rain",
|
||||
"name": "地铁口玻璃连廊",
|
||||
"lock": "同一个地铁站与商场玻璃入口,混凝土雨棚,暖色顶灯,右侧玻璃门,左侧雨街,外面有树、金属指示牌、积水、路锥和警戒线。",
|
||||
"weather": "傍晚雷暴,强降雨,地面反光,远处有闪电。",
|
||||
"cameraLock": "稳定中远景侧向机位,角色比例不跳变,不突然进室内,不切正脸大特写。"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": "blue-umbrella",
|
||||
"name": "折叠蓝伞",
|
||||
"lock": "陈宇右手低握,未打开,不作为避雷动作道具。"
|
||||
},
|
||||
{
|
||||
"id": "yellow-poncho",
|
||||
"name": "黄色雨披",
|
||||
"lock": "唐夏折在双臂上,颜色稳定,不突然穿上。"
|
||||
},
|
||||
{
|
||||
"id": "warning-cones",
|
||||
"name": "路锥和警戒线",
|
||||
"lock": "远处积水旁,任何角色都不跨越。"
|
||||
},
|
||||
{
|
||||
"id": "phone",
|
||||
"name": "手机",
|
||||
"lock": "第三段陈宇低位拿出,不遮挡脸。"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,92 @@
|
||||
[
|
||||
{
|
||||
"shotId": "shot-01",
|
||||
"score": 90,
|
||||
"gates": [
|
||||
{
|
||||
"id": "single-frame",
|
||||
"label": "一图一画面",
|
||||
"status": "fail",
|
||||
"detail": "发现禁用词:split screen"
|
||||
},
|
||||
{
|
||||
"id": "continuity-lock",
|
||||
"label": "角色/场景/道具连续性",
|
||||
"status": "pass",
|
||||
"detail": "角色、场景、道具和首尾帧都已绑定。"
|
||||
},
|
||||
{
|
||||
"id": "voice-subtitle-asr",
|
||||
"label": "声音/字幕/ASR 对齐",
|
||||
"status": "pass",
|
||||
"detail": "对白角色均有固定声线 ID,后续可用 ASR 校对字幕时间。"
|
||||
},
|
||||
{
|
||||
"id": "clip-bridge",
|
||||
"label": "片段衔接",
|
||||
"status": "warn",
|
||||
"detail": "场景跨度较大或未指定实际末帧衔接,需要中间过渡镜头。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shotId": "shot-02",
|
||||
"score": 100,
|
||||
"gates": [
|
||||
{
|
||||
"id": "single-frame",
|
||||
"label": "一图一画面",
|
||||
"status": "pass",
|
||||
"detail": "提示词包含单画面约束,未发现分屏/拼图/漫画页风险词。"
|
||||
},
|
||||
{
|
||||
"id": "continuity-lock",
|
||||
"label": "角色/场景/道具连续性",
|
||||
"status": "pass",
|
||||
"detail": "角色、场景、道具和首尾帧都已绑定。"
|
||||
},
|
||||
{
|
||||
"id": "voice-subtitle-asr",
|
||||
"label": "声音/字幕/ASR 对齐",
|
||||
"status": "pass",
|
||||
"detail": "对白角色均有固定声线 ID,后续可用 ASR 校对字幕时间。"
|
||||
},
|
||||
{
|
||||
"id": "clip-bridge",
|
||||
"label": "片段衔接",
|
||||
"status": "pass",
|
||||
"detail": "使用上一段实际末帧作为下一段首帧。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"shotId": "shot-03",
|
||||
"score": 100,
|
||||
"gates": [
|
||||
{
|
||||
"id": "single-frame",
|
||||
"label": "一图一画面",
|
||||
"status": "pass",
|
||||
"detail": "提示词包含单画面约束,未发现分屏/拼图/漫画页风险词。"
|
||||
},
|
||||
{
|
||||
"id": "continuity-lock",
|
||||
"label": "角色/场景/道具连续性",
|
||||
"status": "pass",
|
||||
"detail": "角色、场景、道具和首尾帧都已绑定。"
|
||||
},
|
||||
{
|
||||
"id": "voice-subtitle-asr",
|
||||
"label": "声音/字幕/ASR 对齐",
|
||||
"status": "pass",
|
||||
"detail": "对白角色均有固定声线 ID,后续可用 ASR 校对字幕时间。"
|
||||
},
|
||||
{
|
||||
"id": "clip-bridge",
|
||||
"label": "片段衔接",
|
||||
"status": "pass",
|
||||
"detail": "使用上一段实际末帧作为下一段首帧。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"schema": "ai-drama-platform.prompt-pack.v1",
|
||||
"adapter": "owned-model-platform",
|
||||
"global": {
|
||||
"style": "原创国产漫画/国漫 2D 动画风格,竖屏 9:16,干净赛璐璐上色,电影感中景,傍晚雷雨,稳定侧向中远景机位。",
|
||||
"singleFrameRule": "ONE SINGLE STANDALONE STILL IMAGE FOR ONE VIDEO SHOT ONLY. One complete continuous scene, one location, one time point, one camera angle, one clear action. Fill the entire portrait canvas with this uninterrupted composition.",
|
||||
"negativePrompt": "no subtitles, no readable text, no logo, no watermark, no new characters, no split screen, no comic panel, no collage, no contact sheet, no storyboard, no multiple scenes, no multiple time points, no picture-in-picture, no front-facing talking close-up"
|
||||
},
|
||||
"characterLocks": [
|
||||
{
|
||||
"id": "chen-yu",
|
||||
"name": "陈宇",
|
||||
"role": "青年志愿者",
|
||||
"visualLock": "23岁中国青年,短黑发,深青色连帽雨衣,黑色双肩包,折叠蓝伞低握,表情冷静,站姿克制。",
|
||||
"costumeState": "深青色雨衣始终半湿,背包不离身,蓝伞未打开。",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-male-calm-chenyu-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "青年男声,普通话,中低音,镇定,不播音腔",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
},
|
||||
"casting": {
|
||||
"baseLook": "定妆照待生成",
|
||||
"turnarounds": [
|
||||
"正面",
|
||||
"侧面",
|
||||
"背面"
|
||||
],
|
||||
"wardrobe": [
|
||||
"雨衣常服",
|
||||
"室内干燥版",
|
||||
"后续志愿者马甲"
|
||||
],
|
||||
"reuseScope": "S01 全季"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "tang-xia",
|
||||
"name": "唐夏",
|
||||
"role": "高中女生",
|
||||
"visualLock": "16岁中国女生,黑色马尾,蓝白校服运动套装,小号海军蓝背包,黄色雨披折在双臂上。",
|
||||
"costumeState": "校服袖口被雨打湿,黄色雨披只抱在手里不穿上。",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-girl-natural-tangxia-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "少女普通话,自然干净,不娃娃音,不尖锐",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
},
|
||||
"casting": {
|
||||
"baseLook": "定妆照待生成",
|
||||
"turnarounds": [
|
||||
"正面",
|
||||
"侧面",
|
||||
"背面"
|
||||
],
|
||||
"wardrobe": [
|
||||
"校服湿袖版",
|
||||
"雨披展开版",
|
||||
"室内等待版"
|
||||
],
|
||||
"reuseScope": "S01 前 6 集"
|
||||
}
|
||||
}
|
||||
],
|
||||
"locationLocks": [
|
||||
{
|
||||
"id": "metro-canopy-rain",
|
||||
"name": "地铁口玻璃连廊",
|
||||
"lock": "同一个地铁站与商场玻璃入口,混凝土雨棚,暖色顶灯,右侧玻璃门,左侧雨街,外面有树、金属指示牌、积水、路锥和警戒线。",
|
||||
"weather": "傍晚雷暴,强降雨,地面反光,远处有闪电。",
|
||||
"cameraLock": "稳定中远景侧向机位,角色比例不跳变,不突然进室内,不切正脸大特写。"
|
||||
}
|
||||
],
|
||||
"propLocks": [
|
||||
{
|
||||
"id": "blue-umbrella",
|
||||
"name": "折叠蓝伞",
|
||||
"lock": "陈宇右手低握,未打开,不作为避雷动作道具。"
|
||||
},
|
||||
{
|
||||
"id": "yellow-poncho",
|
||||
"name": "黄色雨披",
|
||||
"lock": "唐夏折在双臂上,颜色稳定,不突然穿上。"
|
||||
},
|
||||
{
|
||||
"id": "warning-cones",
|
||||
"name": "路锥和警戒线",
|
||||
"lock": "远处积水旁,任何角色都不跨越。"
|
||||
},
|
||||
{
|
||||
"id": "phone",
|
||||
"name": "手机",
|
||||
"lock": "第三段陈宇低位拿出,不遮挡脸。"
|
||||
}
|
||||
],
|
||||
"prompts": [
|
||||
{
|
||||
"id": "shot-01",
|
||||
"imagePrompt": "ONE SINGLE STANDALONE STILL IMAGE FOR ONE VIDEO SHOT ONLY. One complete continuous scene, one location, one time point, one camera angle, one clear action. Fill the entire portrait canvas with this uninterrupted composition. 原创国产漫画/国漫 2D 动画风格,竖屏 9:16,干净赛璐璐上色,电影感中景,傍晚雷雨,稳定侧向中远景机位。 陈宇在地铁口雨棚内叫停唐夏,二人保持同一侧向中远景,外面树和金属牌处于雨幕中。单一地点、单一时间点、单一动作。",
|
||||
"negativePrompt": "no subtitles, no readable text, no logo, no watermark, no new characters, no split screen, no comic panel, no collage, no contact sheet, no storyboard, no multiple scenes, no multiple time points, no picture-in-picture, no front-facing talking close-up, no standing under tree, no touching metal sign, no indoor jump, no new characters, no split screen",
|
||||
"imageToVideoPrompt": "5-6 秒连续动作:陈宇叫停,唐夏停步回头,两人看向树和金属牌。对白自然普通话,嘴型不做正脸特写。",
|
||||
"seed": 2608196101,
|
||||
"durationSec": 6
|
||||
},
|
||||
{
|
||||
"id": "shot-02",
|
||||
"imagePrompt": "ONE SINGLE STANDALONE STILL IMAGE FOR ONE VIDEO SHOT ONLY. One complete continuous scene, one location, one time point, one camera angle, one clear action. Fill the entire portrait canvas with this uninterrupted composition. 原创国产漫画/国漫 2D 动画风格,竖屏 9:16,干净赛璐璐上色,电影感中景,傍晚雷雨,稳定侧向中远景机位。 从上一段实际末帧继续,唐夏在雨棚内退半步,远处积水、电线风险、路锥和警戒线保持位置稳定。",
|
||||
"negativePrompt": "no subtitles, no readable text, no logo, no watermark, no new characters, no split screen, no comic panel, no collage, no contact sheet, no storyboard, no multiple scenes, no multiple time points, no picture-in-picture, no front-facing talking close-up, no stepping into puddle, no crossing cones, no touching fallen cable, no sudden zoom",
|
||||
"imageToVideoPrompt": "5-6 秒连续动作:人物只移动半步,注意力转向远处积水和警戒线。不要跨线,不要切换地点。",
|
||||
"seed": 2608196102,
|
||||
"durationSec": 6
|
||||
},
|
||||
{
|
||||
"id": "shot-03",
|
||||
"imagePrompt": "ONE SINGLE STANDALONE STILL IMAGE FOR ONE VIDEO SHOT ONLY. One complete continuous scene, one location, one time point, one camera angle, one clear action. Fill the entire portrait canvas with this uninterrupted composition. 原创国产漫画/国漫 2D 动画风格,竖屏 9:16,干净赛璐璐上色,电影感中景,傍晚雷雨,稳定侧向中远景机位。 同一地铁口玻璃门旁,两人后退到入口内侧等待,陈宇低位拿手机,唐夏抱着黄色雨披安静点头。",
|
||||
"negativePrompt": "no subtitles, no readable text, no logo, no watermark, no new characters, no split screen, no comic panel, no collage, no contact sheet, no storyboard, no multiple scenes, no multiple time points, no picture-in-picture, no front-facing talking close-up, no new room, no bright sunny weather, no front mouth close-up, no unsafe behavior",
|
||||
"imageToVideoPrompt": "5-6 秒连续动作:雨声变闷,人物靠近入口内侧,低头看手机,结尾仍留在同一雨棚场景。",
|
||||
"seed": 2608196103,
|
||||
"durationSec": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"schema": "ai-drama-platform.shot-list.v1",
|
||||
"seriesId": "thunder-mouth",
|
||||
"episodeId": "E01",
|
||||
"aspectRatio": "9:16",
|
||||
"shots": [
|
||||
{
|
||||
"id": "shot-01",
|
||||
"title": "叫停树下近路",
|
||||
"durationSec": 6,
|
||||
"camera": "稳定侧向中远景,避免正脸大段说话,人物在雨棚内。",
|
||||
"action": "陈宇半步伸手叫停唐夏,两人一起看向外面的树和金属指示牌。",
|
||||
"characters": [
|
||||
"chen-yu",
|
||||
"tang-xia"
|
||||
],
|
||||
"location": "metro-canopy-rain",
|
||||
"props": [
|
||||
"blue-umbrella",
|
||||
"yellow-poncho"
|
||||
],
|
||||
"firstFrame": "shots/shot-01/first.png",
|
||||
"lastFrame": "shots/shot-01/last.png",
|
||||
"transitionFromPrevious": "episode-start",
|
||||
"voiceLines": [
|
||||
{
|
||||
"id": "line-001",
|
||||
"characterId": "chen-yu",
|
||||
"text": "等一下,先别出去。雷暴来了,树下和金属牌旁边都不安全。",
|
||||
"emotion": "冷静但有一点急",
|
||||
"targetDurationSec": 3.2,
|
||||
"audioFile": "voices/chen_yu/line_001.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"id": "line-002",
|
||||
"characterId": "tang-xia",
|
||||
"text": "那我现在该往哪走?",
|
||||
"emotion": "疑惑,压低声音",
|
||||
"targetDurationSec": 1.6,
|
||||
"audioFile": "voices/tang_xia/line_002.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "shot-02",
|
||||
"title": "避开积水电线",
|
||||
"durationSec": 6,
|
||||
"camera": "沿用上一段实际末帧,机位不换,镜头只轻微跟随视线。",
|
||||
"action": "两人视线从树和金属牌转向远处积水与警戒线,唐夏向后退半步。",
|
||||
"characters": [
|
||||
"chen-yu",
|
||||
"tang-xia"
|
||||
],
|
||||
"location": "metro-canopy-rain",
|
||||
"props": [
|
||||
"blue-umbrella",
|
||||
"yellow-poncho",
|
||||
"warning-cones"
|
||||
],
|
||||
"firstFrame": "AUTO_PREVIOUS_ACTUAL_LAST_FRAME",
|
||||
"lastFrame": "shots/shot-02/last.png",
|
||||
"transitionFromPrevious": "actual-last-frame",
|
||||
"voiceLines": [
|
||||
{
|
||||
"id": "line-003",
|
||||
"characterId": "chen-yu",
|
||||
"text": "看左边,积水旁可能有落地电线。别靠近,也别跨警戒线。",
|
||||
"emotion": "明确提醒",
|
||||
"targetDurationSec": 3.4,
|
||||
"audioFile": "voices/chen_yu/line_003.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"id": "line-004",
|
||||
"characterId": "tang-xia",
|
||||
"text": "我退回来,在门口等。",
|
||||
"emotion": "听懂后配合",
|
||||
"targetDurationSec": 1.5,
|
||||
"audioFile": "voices/tang_xia/line_004.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "shot-03",
|
||||
"title": "门内等待报平安",
|
||||
"durationSec": 6,
|
||||
"camera": "沿用上一段实际末帧,稍微向玻璃门内侧构图,不进入新房间。",
|
||||
"action": "两人靠近玻璃门内侧等待,陈宇低位拿出手机,唐夏情绪稳定。",
|
||||
"characters": [
|
||||
"chen-yu",
|
||||
"tang-xia"
|
||||
],
|
||||
"location": "metro-canopy-rain",
|
||||
"props": [
|
||||
"blue-umbrella",
|
||||
"yellow-poncho",
|
||||
"phone"
|
||||
],
|
||||
"firstFrame": "AUTO_PREVIOUS_ACTUAL_LAST_FRAME",
|
||||
"lastFrame": "shots/shot-03/last.png",
|
||||
"transitionFromPrevious": "actual-last-frame",
|
||||
"voiceLines": [
|
||||
{
|
||||
"id": "line-005",
|
||||
"characterId": "tang-xia",
|
||||
"text": "我给家里报个平安。",
|
||||
"emotion": "松一口气",
|
||||
"targetDurationSec": 1.6,
|
||||
"audioFile": "voices/tang_xia/line_005.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"id": "line-006",
|
||||
"characterId": "chen-yu",
|
||||
"text": "对,先待在建筑入口内侧,等雷声远了再走。",
|
||||
"emotion": "稳定收束",
|
||||
"targetDurationSec": 2.8,
|
||||
"audioFile": "voices/chen_yu/line_006.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"schema": "ai-drama-platform.voice-lines.v1",
|
||||
"episodeId": "E01",
|
||||
"audioPipeline": {
|
||||
"adapter": "newapi-audio-production",
|
||||
"tts": {
|
||||
"model": "IndexTTS-2.5",
|
||||
"endpoint": "/audio/speech",
|
||||
"request": "multipart/form-data",
|
||||
"voiceLockField": "prompt_speech",
|
||||
"referenceStatus": "requires-user-approved-natural-reference",
|
||||
"blockedReferenceSources": [
|
||||
"macOS say",
|
||||
"MiniMax H3 native audio",
|
||||
"old probe wav",
|
||||
"temporary machine voice"
|
||||
]
|
||||
},
|
||||
"asr": {
|
||||
"model": "paraformer-zh-long",
|
||||
"endpoint": "/audio/transcriptions",
|
||||
"request": "multipart/form-data",
|
||||
"responseFormat": "verbose_json"
|
||||
}
|
||||
},
|
||||
"characters": [
|
||||
{
|
||||
"id": "chen-yu",
|
||||
"name": "陈宇",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-male-calm-chenyu-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "青年男声,普通话,中低音,镇定,不播音腔",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "tang-xia",
|
||||
"name": "唐夏",
|
||||
"voiceLock": {
|
||||
"voiceId": "local-girl-natural-tangxia-v1",
|
||||
"status": "needs-user-approved-reference",
|
||||
"tone": "少女普通话,自然干净,不娃娃音,不尖锐",
|
||||
"ttsModel": "IndexTTS-2.5",
|
||||
"asrModel": "paraformer-zh-long",
|
||||
"referenceAudio": null,
|
||||
"referencePolicy": "必须先获得用户确认的干净自然人声参考;禁止使用 macOS say、H3 原生音频、旧 probe 或任何机器化临时音频作为 prompt_speech。",
|
||||
"candidateModels": [
|
||||
"Qwen3-TTS VoiceDesign",
|
||||
"CosyVoice",
|
||||
"IndexTTS-2.5"
|
||||
],
|
||||
"auditionPolicy": "一次只生成单句试听,用户试听确认后再锁定角色声线;未确认前禁止批量生成。",
|
||||
"emotionRefs": {},
|
||||
"ttsRequest": "multipart/form-data: model, input, voice, response_format, speed, kwargs, prompt_speech",
|
||||
"asrRequest": "multipart/form-data: model, file, language=zh, response_format=verbose_json"
|
||||
}
|
||||
}
|
||||
],
|
||||
"lines": [
|
||||
{
|
||||
"shotId": "shot-01",
|
||||
"lineId": "line-001",
|
||||
"characterId": "chen-yu",
|
||||
"text": "等一下,先别出去。雷暴来了,树下和金属牌旁边都不安全。",
|
||||
"emotion": "冷静但有一点急",
|
||||
"targetDurationSec": 3.2,
|
||||
"audioFile": "voices/chen_yu/line_001.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"shotId": "shot-01",
|
||||
"lineId": "line-002",
|
||||
"characterId": "tang-xia",
|
||||
"text": "那我现在该往哪走?",
|
||||
"emotion": "疑惑,压低声音",
|
||||
"targetDurationSec": 1.6,
|
||||
"audioFile": "voices/tang_xia/line_002.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"shotId": "shot-02",
|
||||
"lineId": "line-003",
|
||||
"characterId": "chen-yu",
|
||||
"text": "看左边,积水旁可能有落地电线。别靠近,也别跨警戒线。",
|
||||
"emotion": "明确提醒",
|
||||
"targetDurationSec": 3.4,
|
||||
"audioFile": "voices/chen_yu/line_003.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"shotId": "shot-02",
|
||||
"lineId": "line-004",
|
||||
"characterId": "tang-xia",
|
||||
"text": "我退回来,在门口等。",
|
||||
"emotion": "听懂后配合",
|
||||
"targetDurationSec": 1.5,
|
||||
"audioFile": "voices/tang_xia/line_004.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"shotId": "shot-03",
|
||||
"lineId": "line-005",
|
||||
"characterId": "tang-xia",
|
||||
"text": "我给家里报个平安。",
|
||||
"emotion": "松一口气",
|
||||
"targetDurationSec": 1.6,
|
||||
"audioFile": "voices/tang_xia/line_005.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
},
|
||||
{
|
||||
"shotId": "shot-03",
|
||||
"lineId": "line-006",
|
||||
"characterId": "chen-yu",
|
||||
"text": "对,先待在建筑入口内侧,等雷声远了再走。",
|
||||
"emotion": "稳定收束",
|
||||
"targetDurationSec": 2.8,
|
||||
"audioFile": "voices/chen_yu/line_006.wav",
|
||||
"mouthPlan": "规避嘴形"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user