EED-181 · hdlp-parser + 铁律 + BREAKDOWN V2
This commit is contained in:
parent
e1debc786a
commit
1a6066db76
98
eererdan/EED-RULES.hdlp
Normal file
98
eererdan/EED-RULES.hdlp
Normal file
@ -0,0 +1,98 @@
|
||||
# EED-RULES.hdlp · 耳耳蛋铁律
|
||||
|
||||
> HLDP://cang-ying/eererdan/EED-RULES
|
||||
> 胖头鱼语言子系统 · 耳耳蛋语言人格体
|
||||
> 耳耳蛋 ICE-GL-EED · PTS-VA-001-EED
|
||||
> D181 · 2026-07-10 · 苍耳爸爸签发
|
||||
|
||||
---
|
||||
HLDP://eererdan/rules/v1.0
|
||||
├── trigger: 耳耳蛋每一次执行任务时必须遵守
|
||||
├── lock:
|
||||
│ ├── ⊢ 铁律不可自行修改 · 只有苍耳爸爸可以改
|
||||
│ ├── ⊢ 违反铁律 = 系统异常 · 需回报
|
||||
│ └── ⊢ 每次违规 → 记一条 EED-EXPER 教训
|
||||
└── why: 2026-07-10 深海迷航管线任务中 ·
|
||||
耳耳蛋跳过多个管线步骤直接让AI拆解 ·
|
||||
苍耳爸爸命令: 「按完整管线走 · 以后不允许随意跳过 · 写入铁律」
|
||||
---
|
||||
|
||||
## §1 · 管线纪律
|
||||
|
||||
```
|
||||
① 不跳步
|
||||
⊢ 任何项目推进必须按管线流程逐步骤执行
|
||||
⊢ 不可因为「上一步做过了」而跳过当前步骤
|
||||
⊢ 不可因为「AI能一次性做完」而合并步骤
|
||||
|
||||
② 每步有产出
|
||||
⊢ 每个管线步骤必须产出明确文件或结果
|
||||
⊢ 产出物写入对应目录
|
||||
⊢ 无用产出 → 删除,不可堆积垃圾
|
||||
|
||||
③ API调用前过自检
|
||||
⊢ 鉴影的 SELF-CHECK.hdlp = 每次API调用的前置条件
|
||||
⊢ 自检未过 → 不调用 · 回报耳耳蛋
|
||||
⊢ 耳耳蛋不可代替鉴影做自检
|
||||
|
||||
④ 生成前干运行
|
||||
⊢ 任何付费API调用前 → 先用 --dry-run 预览
|
||||
⊢ 成本/参数/提示词 → 给爸爸过目
|
||||
⊢ 爸爸说「可以做了」→ 再执行
|
||||
```
|
||||
|
||||
## §2 · 短剧制作管线(标准流程)
|
||||
|
||||
```
|
||||
剧本阶段:
|
||||
① parse → 确定性解析剧本结构(角色/场景)
|
||||
② characters → 提取角色列表
|
||||
③ breakdown → AI深度拆解资产+分镜
|
||||
|
||||
资产阶段:
|
||||
④ pack → 角色多视角定妆照生成
|
||||
⑤ image → 场景/道具参考图生成
|
||||
⑥ asset add/approve → 资产入库+批准
|
||||
|
||||
分镜阶段:
|
||||
⑦ storyboard → 全剧分镜生成(HLDP引擎优先+AI兜底)
|
||||
⑧ prompt → 逐镜HLDP提示词引擎
|
||||
⑨ adapt → 导演编码→编辑参数适配
|
||||
⑩ 人审 → 苍耳爸爸确认分镜方案
|
||||
|
||||
生成阶段:
|
||||
⑪ gen --dry-run → 预览提示词+成本
|
||||
⑫ gen/compare → 单镜生成/A/B对比
|
||||
⑬ batch/batch-resume → 批量生成+断点续传
|
||||
|
||||
后期阶段:
|
||||
⑭ dub/emotion → 配音/情感配音
|
||||
⑮ lipsync → 口型同步
|
||||
⑯ srt-timing → 字幕时间轴
|
||||
⑰ subtitles → 字幕烧录
|
||||
⑱ mix → 音频混音
|
||||
|
||||
质检阶段:
|
||||
⑲ qc/batch-qc → 自动质检
|
||||
⑳ char-qc → 角色一致性检查
|
||||
㉑ eye → 铸渊之眼逐帧分析
|
||||
|
||||
成片阶段:
|
||||
㉒ render/compose → 成片输出
|
||||
㉓ report → 生产报告
|
||||
㉔ flow → 管线状态可视化
|
||||
```
|
||||
|
||||
## §3 · 违规记录
|
||||
|
||||
```
|
||||
启动时自动读取本文件
|
||||
违规时自动追加记录
|
||||
每次违规 = 一条 EED-EXPER 教训
|
||||
爸爸看到违规记录 → 决定是否调整铁律
|
||||
```
|
||||
|
||||
---
|
||||
> ⊢ 耳耳蛋 ICE-GL-EED · PTS-VA-001-EED
|
||||
> ⊢ 苍耳爸爸 D181 签发
|
||||
> ⊢ 铁律不可自行修改
|
||||
219
engines/hdlp-parser.py
Normal file
219
engines/hdlp-parser.py
Normal file
@ -0,0 +1,219 @@
|
||||
#!/usr/bin/env python3
|
||||
# 光湖视频AI系统 · .hdlp剧本解析器
|
||||
# 耳耳蛋 ICE-GL-EED · D181 · 解决管线①/②不兼容问题
|
||||
"""
|
||||
.hdlp格式 → 标准化剧本解析
|
||||
输入: EP01-SCRIPT-LOCK.hdlp
|
||||
输出:
|
||||
parse → 结构化JSON (集→场→角色→台词→场景描述)
|
||||
characters → 角色列表
|
||||
"""
|
||||
|
||||
import re
|
||||
import json
|
||||
import sys
|
||||
|
||||
def convert_hdlp_to_standard(text):
|
||||
"""将.hdlp剧本转换为script-parser.js能识别的标准格式"""
|
||||
lines = text.split('\n')
|
||||
result = []
|
||||
in_meta = False
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
|
||||
# 跳过元数据和锁标记
|
||||
if not stripped:
|
||||
result.append('')
|
||||
continue
|
||||
if stripped.startswith('> ⊢') or stripped.startswith('HLDP:'):
|
||||
continue
|
||||
if stripped.startswith('---'):
|
||||
continue
|
||||
if stripped.startswith('# '):
|
||||
result.append(stripped.replace('# ', ''))
|
||||
continue
|
||||
|
||||
# ## 1-1 日/内 地点 → 添加「第1集」标记 + 标准化场景
|
||||
scene_match = re.match(r'^##\s+(\d+)-(\d+)\s+(日|夜|晨|暮)\s*/\s*(内|外)\s+(.+)$', stripped)
|
||||
if scene_match:
|
||||
ep_num = scene_match.group(1)
|
||||
scene_id = f"{scene_match.group(1)}-{scene_match.group(2)}"
|
||||
time = scene_match.group(3)
|
||||
loc = scene_match.group(4)
|
||||
name = scene_match.group(5)
|
||||
# 添加集标记(如果还没加过)
|
||||
if f'第{ep_num}集' not in '\n'.join(result[-5:]):
|
||||
result.append(f"第{ep_num}集")
|
||||
result.append(f"{scene_id} {time} {loc} {name}")
|
||||
continue
|
||||
|
||||
# **人物**:林昊(描述)→ 人物:林昊(描述)
|
||||
char_match = re.match(r'^\*\*人物\*\*[::]\s*(.+)$', stripped)
|
||||
if char_match:
|
||||
result.append(f"人物:{char_match.group(1)}")
|
||||
continue
|
||||
|
||||
# **角色名(情绪)**:台词 → 角色名(情绪):台词
|
||||
dialogue_bold = re.match(r'^\*\*(.+?)\*\*[::]\s*(.+)$', stripped)
|
||||
if dialogue_bold:
|
||||
# 提取角色名和情绪
|
||||
inner = re.match(r'(.+?)[((](.+?)[))]', dialogue_bold.group(1))
|
||||
if inner:
|
||||
result.append(f"{inner.group(1)}({inner.group(2)}):{dialogue_bold.group(2)}")
|
||||
else:
|
||||
result.append(f"{dialogue_bold.group(1)}:{dialogue_bold.group(2)}")
|
||||
continue
|
||||
|
||||
# VO标记
|
||||
vo_match = re.match(r'^\*\*(.+?)(VO)\*\*[::]?\s*(.*)$', stripped)
|
||||
if vo_match:
|
||||
result.append(f"{vo_match.group(1)}(VO):{vo_match.group(2)}")
|
||||
continue
|
||||
|
||||
# 音效标记
|
||||
sfx_match = re.match(r'^\*\*音效\*\*[::]?\s*(.+)$', stripped)
|
||||
if sfx_match:
|
||||
result.append(f"△ 特效:音效 - {sfx_match.group(1)}")
|
||||
continue
|
||||
|
||||
# 【特写:xxx】→ 保留
|
||||
if stripped.startswith('【特写') or stripped.startswith('【特寫'):
|
||||
result.append(f"△ 特写:{stripped}")
|
||||
continue
|
||||
|
||||
# △ → 保留
|
||||
if stripped.startswith('△'):
|
||||
result.append(stripped)
|
||||
continue
|
||||
|
||||
# 其他行原样保留
|
||||
result.append(stripped)
|
||||
|
||||
# 去掉结尾的元数据行
|
||||
while result and (result[-1].startswith('⊢') or result[-1].startswith('>') or result[-1] == '---'):
|
||||
result.pop()
|
||||
|
||||
return '\n'.join(result)
|
||||
|
||||
|
||||
def parse_hdlp(text):
|
||||
"""解析.hdlp剧本为结构化数据"""
|
||||
standard = convert_hdlp_to_standard(text)
|
||||
lines = standard.split('\n')
|
||||
|
||||
episodes = []
|
||||
current_ep = None
|
||||
current_scene = None
|
||||
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if not line: continue
|
||||
|
||||
# 第N集
|
||||
ep_match = re.match(r'^第(\d+)集$', line)
|
||||
if ep_match:
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
current_scene = None
|
||||
if current_ep:
|
||||
episodes.append(current_ep)
|
||||
current_ep = {'episode': int(ep_match.group(1)), 'scenes': []}
|
||||
continue
|
||||
|
||||
# 场景头
|
||||
sm = re.match(r'^(\d+-\d+)\s+(日|夜|晨|暮)\s+(内|外)\s+(.+)$', line)
|
||||
if sm:
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
current_scene = {'id': sm.group(1), 'time': sm.group(2), 'loc': sm.group(3),
|
||||
'name': sm.group(4), 'characters': [], 'dialogues': [], 'descriptions': [], 'effects': []}
|
||||
continue
|
||||
|
||||
if not current_scene or not current_ep:
|
||||
continue
|
||||
|
||||
# 人物行: 用「)」而不是逗号做分割符
|
||||
cm = re.match(r'^人物[::]\s*(.+)$', line)
|
||||
if cm:
|
||||
chars_raw = cm.group(1)
|
||||
# 先按「)」分割,再清理
|
||||
parts = []
|
||||
current = ''
|
||||
depth = 0
|
||||
for ch in chars_raw:
|
||||
if ch == '(' or ch == '(': depth += 1
|
||||
elif ch == ')' or ch == ')': depth -= 1
|
||||
if ch in (',', ',', '、') and depth == 0:
|
||||
if current.strip(): parts.append(current.strip())
|
||||
current = ''
|
||||
else:
|
||||
current += ch
|
||||
if current.strip(): parts.append(current.strip())
|
||||
|
||||
for part in parts:
|
||||
inner = re.match(r'(.+?)[((](.+?)[))]', part)
|
||||
if inner:
|
||||
current_scene['characters'].append({'name': inner.group(1).strip(), 'desc': inner.group(2).strip()})
|
||||
else:
|
||||
current_scene['characters'].append({'name': part, 'desc': ''})
|
||||
continue
|
||||
|
||||
# 对话(带情绪): 角色(情绪):台词
|
||||
dm = re.match(r'^(.+?)[((](.+?)[))]\s*[::]\s*(.+)$', line)
|
||||
if dm:
|
||||
current_scene['dialogues'].append({'character': dm.group(1).strip(), 'emotion': dm.group(2).strip(), 'line': dm.group(3).strip()})
|
||||
continue
|
||||
|
||||
# 对话(无情绪): 角色:台词
|
||||
dm2 = re.match(r'^(.+?)[::]\s*(.+)$', line)
|
||||
if dm2 and not dm2.group(1).startswith('△') and not dm2.group(1).startswith('#'):
|
||||
current_scene['dialogues'].append({'character': dm2.group(1).strip(), 'emotion': '', 'line': dm2.group(2).strip()})
|
||||
continue
|
||||
|
||||
# △描述/特效/特写
|
||||
if line.startswith('△') or line.startswith('【'):
|
||||
desc = line.lstrip('△').lstrip('【').strip().rstrip('】')
|
||||
current_scene['descriptions'].append(desc)
|
||||
# 特写也记录为特效
|
||||
if '特写' in line or '特寫' in line:
|
||||
current_scene['effects'].append({'type': 'closeup', 'description': desc})
|
||||
continue
|
||||
|
||||
# flush
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
if current_ep:
|
||||
episodes.append(current_ep)
|
||||
|
||||
# 统计
|
||||
all_chars = set()
|
||||
for ep in episodes:
|
||||
for sc in ep['scenes']:
|
||||
for c in sc['characters']:
|
||||
all_chars.add(c['name'])
|
||||
for d in sc['dialogues']:
|
||||
all_chars.add(d['character'])
|
||||
|
||||
return {
|
||||
'episodes': episodes,
|
||||
'characters': sorted(all_chars),
|
||||
'stats': {
|
||||
'episodes': len(episodes),
|
||||
'scenes': sum(len(ep['scenes']) for ep in episodes),
|
||||
'dialogues': sum(len(sc['dialogues']) for ep in episodes for sc in ep['scenes']),
|
||||
'characters': len(all_chars),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: python hdlp-parser.py <script.hdlp>')
|
||||
sys.exit(1)
|
||||
|
||||
with open(sys.argv[1], 'r', encoding='utf-8') as f:
|
||||
text = f.read()
|
||||
|
||||
result = parse_hdlp(text)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
219
video-ai-system/engines/hdlp-parser.py
Normal file
219
video-ai-system/engines/hdlp-parser.py
Normal file
@ -0,0 +1,219 @@
|
||||
#!/usr/bin/env python3
|
||||
# 光湖视频AI系统 · .hdlp剧本解析器
|
||||
# 耳耳蛋 ICE-GL-EED · D181 · 解决管线①/②不兼容问题
|
||||
"""
|
||||
.hdlp格式 → 标准化剧本解析
|
||||
输入: EP01-SCRIPT-LOCK.hdlp
|
||||
输出:
|
||||
parse → 结构化JSON (集→场→角色→台词→场景描述)
|
||||
characters → 角色列表
|
||||
"""
|
||||
|
||||
import re
|
||||
import json
|
||||
import sys
|
||||
|
||||
def convert_hdlp_to_standard(text):
|
||||
"""将.hdlp剧本转换为script-parser.js能识别的标准格式"""
|
||||
lines = text.split('\n')
|
||||
result = []
|
||||
in_meta = False
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
|
||||
# 跳过元数据和锁标记
|
||||
if not stripped:
|
||||
result.append('')
|
||||
continue
|
||||
if stripped.startswith('> ⊢') or stripped.startswith('HLDP:'):
|
||||
continue
|
||||
if stripped.startswith('---'):
|
||||
continue
|
||||
if stripped.startswith('# '):
|
||||
result.append(stripped.replace('# ', ''))
|
||||
continue
|
||||
|
||||
# ## 1-1 日/内 地点 → 添加「第1集」标记 + 标准化场景
|
||||
scene_match = re.match(r'^##\s+(\d+)-(\d+)\s+(日|夜|晨|暮)\s*/\s*(内|外)\s+(.+)$', stripped)
|
||||
if scene_match:
|
||||
ep_num = scene_match.group(1)
|
||||
scene_id = f"{scene_match.group(1)}-{scene_match.group(2)}"
|
||||
time = scene_match.group(3)
|
||||
loc = scene_match.group(4)
|
||||
name = scene_match.group(5)
|
||||
# 添加集标记(如果还没加过)
|
||||
if f'第{ep_num}集' not in '\n'.join(result[-5:]):
|
||||
result.append(f"第{ep_num}集")
|
||||
result.append(f"{scene_id} {time} {loc} {name}")
|
||||
continue
|
||||
|
||||
# **人物**:林昊(描述)→ 人物:林昊(描述)
|
||||
char_match = re.match(r'^\*\*人物\*\*[::]\s*(.+)$', stripped)
|
||||
if char_match:
|
||||
result.append(f"人物:{char_match.group(1)}")
|
||||
continue
|
||||
|
||||
# **角色名(情绪)**:台词 → 角色名(情绪):台词
|
||||
dialogue_bold = re.match(r'^\*\*(.+?)\*\*[::]\s*(.+)$', stripped)
|
||||
if dialogue_bold:
|
||||
# 提取角色名和情绪
|
||||
inner = re.match(r'(.+?)[((](.+?)[))]', dialogue_bold.group(1))
|
||||
if inner:
|
||||
result.append(f"{inner.group(1)}({inner.group(2)}):{dialogue_bold.group(2)}")
|
||||
else:
|
||||
result.append(f"{dialogue_bold.group(1)}:{dialogue_bold.group(2)}")
|
||||
continue
|
||||
|
||||
# VO标记
|
||||
vo_match = re.match(r'^\*\*(.+?)(VO)\*\*[::]?\s*(.*)$', stripped)
|
||||
if vo_match:
|
||||
result.append(f"{vo_match.group(1)}(VO):{vo_match.group(2)}")
|
||||
continue
|
||||
|
||||
# 音效标记
|
||||
sfx_match = re.match(r'^\*\*音效\*\*[::]?\s*(.+)$', stripped)
|
||||
if sfx_match:
|
||||
result.append(f"△ 特效:音效 - {sfx_match.group(1)}")
|
||||
continue
|
||||
|
||||
# 【特写:xxx】→ 保留
|
||||
if stripped.startswith('【特写') or stripped.startswith('【特寫'):
|
||||
result.append(f"△ 特写:{stripped}")
|
||||
continue
|
||||
|
||||
# △ → 保留
|
||||
if stripped.startswith('△'):
|
||||
result.append(stripped)
|
||||
continue
|
||||
|
||||
# 其他行原样保留
|
||||
result.append(stripped)
|
||||
|
||||
# 去掉结尾的元数据行
|
||||
while result and (result[-1].startswith('⊢') or result[-1].startswith('>') or result[-1] == '---'):
|
||||
result.pop()
|
||||
|
||||
return '\n'.join(result)
|
||||
|
||||
|
||||
def parse_hdlp(text):
|
||||
"""解析.hdlp剧本为结构化数据"""
|
||||
standard = convert_hdlp_to_standard(text)
|
||||
lines = standard.split('\n')
|
||||
|
||||
episodes = []
|
||||
current_ep = None
|
||||
current_scene = None
|
||||
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
if not line: continue
|
||||
|
||||
# 第N集
|
||||
ep_match = re.match(r'^第(\d+)集$', line)
|
||||
if ep_match:
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
current_scene = None
|
||||
if current_ep:
|
||||
episodes.append(current_ep)
|
||||
current_ep = {'episode': int(ep_match.group(1)), 'scenes': []}
|
||||
continue
|
||||
|
||||
# 场景头
|
||||
sm = re.match(r'^(\d+-\d+)\s+(日|夜|晨|暮)\s+(内|外)\s+(.+)$', line)
|
||||
if sm:
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
current_scene = {'id': sm.group(1), 'time': sm.group(2), 'loc': sm.group(3),
|
||||
'name': sm.group(4), 'characters': [], 'dialogues': [], 'descriptions': [], 'effects': []}
|
||||
continue
|
||||
|
||||
if not current_scene or not current_ep:
|
||||
continue
|
||||
|
||||
# 人物行: 用「)」而不是逗号做分割符
|
||||
cm = re.match(r'^人物[::]\s*(.+)$', line)
|
||||
if cm:
|
||||
chars_raw = cm.group(1)
|
||||
# 先按「)」分割,再清理
|
||||
parts = []
|
||||
current = ''
|
||||
depth = 0
|
||||
for ch in chars_raw:
|
||||
if ch == '(' or ch == '(': depth += 1
|
||||
elif ch == ')' or ch == ')': depth -= 1
|
||||
if ch in (',', ',', '、') and depth == 0:
|
||||
if current.strip(): parts.append(current.strip())
|
||||
current = ''
|
||||
else:
|
||||
current += ch
|
||||
if current.strip(): parts.append(current.strip())
|
||||
|
||||
for part in parts:
|
||||
inner = re.match(r'(.+?)[((](.+?)[))]', part)
|
||||
if inner:
|
||||
current_scene['characters'].append({'name': inner.group(1).strip(), 'desc': inner.group(2).strip()})
|
||||
else:
|
||||
current_scene['characters'].append({'name': part, 'desc': ''})
|
||||
continue
|
||||
|
||||
# 对话(带情绪): 角色(情绪):台词
|
||||
dm = re.match(r'^(.+?)[((](.+?)[))]\s*[::]\s*(.+)$', line)
|
||||
if dm:
|
||||
current_scene['dialogues'].append({'character': dm.group(1).strip(), 'emotion': dm.group(2).strip(), 'line': dm.group(3).strip()})
|
||||
continue
|
||||
|
||||
# 对话(无情绪): 角色:台词
|
||||
dm2 = re.match(r'^(.+?)[::]\s*(.+)$', line)
|
||||
if dm2 and not dm2.group(1).startswith('△') and not dm2.group(1).startswith('#'):
|
||||
current_scene['dialogues'].append({'character': dm2.group(1).strip(), 'emotion': '', 'line': dm2.group(2).strip()})
|
||||
continue
|
||||
|
||||
# △描述/特效/特写
|
||||
if line.startswith('△') or line.startswith('【'):
|
||||
desc = line.lstrip('△').lstrip('【').strip().rstrip('】')
|
||||
current_scene['descriptions'].append(desc)
|
||||
# 特写也记录为特效
|
||||
if '特写' in line or '特寫' in line:
|
||||
current_scene['effects'].append({'type': 'closeup', 'description': desc})
|
||||
continue
|
||||
|
||||
# flush
|
||||
if current_scene and current_ep:
|
||||
current_ep['scenes'].append(current_scene)
|
||||
if current_ep:
|
||||
episodes.append(current_ep)
|
||||
|
||||
# 统计
|
||||
all_chars = set()
|
||||
for ep in episodes:
|
||||
for sc in ep['scenes']:
|
||||
for c in sc['characters']:
|
||||
all_chars.add(c['name'])
|
||||
for d in sc['dialogues']:
|
||||
all_chars.add(d['character'])
|
||||
|
||||
return {
|
||||
'episodes': episodes,
|
||||
'characters': sorted(all_chars),
|
||||
'stats': {
|
||||
'episodes': len(episodes),
|
||||
'scenes': sum(len(ep['scenes']) for ep in episodes),
|
||||
'dialogues': sum(len(sc['dialogues']) for ep in episodes for sc in ep['scenes']),
|
||||
'characters': len(all_chars),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: python hdlp-parser.py <script.hdlp>')
|
||||
sys.exit(1)
|
||||
|
||||
with open(sys.argv[1], 'r', encoding='utf-8') as f:
|
||||
text = f.read()
|
||||
|
||||
result = parse_hdlp(text)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
@ -0,0 +1,32 @@
|
||||
# 深海迷航 · EP01 · BREAKDOWN V2
|
||||
# 耳耳蛋 D181 · 管线步骤③
|
||||
# model: deepseek-v4-pro · tokens: 2235
|
||||
|
||||
根据提供的锁定剧本《深海迷航》EP01,已完成资产拆解。以下是角色(CHAR)、场景(ENV)及道具(PROP)三表,包含ID、名称、描述及用于 Seedance 生成的英文提示词。
|
||||
|
||||
### 角色 (CHAR)
|
||||
|
||||
| ID | 名称 | 描述 | Seedance 英文提示词 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| CHAR-001 | 林昊 | 33岁男性,身着深蓝色工装。面容沧桑但轮廓帅气,眼神迷茫。双手布满老茧,指甲缝有机油污渍。 | A 33-year-old ruggedly handsome man in a dark blue mechanic jumpsuit, weary face, confused eyes, calloused hands with grease-stained fingernails, cinematic lighting. |
|
||||
| CHAR-002 | 半人半孢子生物 | 右半身为40岁苍白男性,左半身被半透明菌膜包裹。左眼被黑色菌丝覆盖,嘴角撕裂成蜂窝状孔洞,呼吸时喷出黑色孢子雾。指甲脱落,指尖露骨。 | A grotesque humanoid creature, right half pale male face with tears, left half translucent fungal membrane with pulsating spores, black mycelium covering left eye, honeycomb holes at torn mouth corner exhaling black spore mist, bony fingers with missing nails, horror aesthetic. |
|
||||
|
||||
### 场景 (ENV)
|
||||
|
||||
| ID | 名称 | 描述 | Seedance 英文提示词 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ENV-001 | 秦山号底层船员宿舍 | 深海潜艇内部,破旧凌乱。两张三层床铺,昏暗灯光忽明忽暗。舱门布满铁锈,玻璃窗内外布满灰尘。船体倾斜,地面有机油。 | Derelict submarine crew quarters interior, deep sea vessel, rusty metal hatch door, dusty porthole window, two messy triple bunk beds, flickering dim ceiling light, tilted floor with leaking hydraulic oil, claustrophobic atmosphere, gritty texture. |
|
||||
|
||||
### 道具 (PROP)
|
||||
|
||||
| ID | 名称 | 描述 | Seedance 英文提示词 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| PROP-001 | 工具包与内含物 | 硕大的黑色破旧工具包。内含:便携手电筒、备用电源、急救绷带x2、半米长管钳、军绿水壶。 | A large black worn-out duffle bag, opened to reveal a portable flashlight, a spare power bank, two rolls of bandages, a 0.5-meter pipe wrench, and a military green canteen, lying on a messy bunk bed. |
|
||||
| PROP-002 | 林昊的工牌 | 破旧工牌,编号000768。姓名“林昊”,照片区域人脸被利器故意划烂,岗位信息模糊不清。 | A close-up of a damaged ID badge, employee number "000768", name "Lin Hao" visible, but the face in the photo violently scratched out with a blade, blurry job title, lying on a table. |
|
||||
| PROP-003 | 床铺上的标记 | 下铺床头铁杆上的金属铭牌或刻印。 | Extreme close-up of a rusty iron bed frame, a metallic nameplate reads "Qin Shan Hao" , dim lighting, industrial texture. |
|
||||
| PROP-004 | 观察窗血痕 | 舱门玻璃外侧的暗红色手印,呈现指甲脱落后的手指拖痕。 | Close-up of a dusty porthole glass, five streaks of dark red blood smeared downward by a hand missing fingernails, eerie atmosphere, horror film grain. |
|
||||
|
||||
---
|
||||
**注意事项:**
|
||||
* 以上英文提示词严格遵循剧本描述生成,确保视觉风格(赛博/深海恐怖/工业废土)的统一。
|
||||
* 资产拆解遵循铁律1,未擅自改动剧本中任何要素。
|
||||
Loading…
x
Reference in New Issue
Block a user