@dsh-gis/dsh-video-studio-skill 0.8.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +582 -0
  2. package/README.md +287 -304
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/package.json +11 -10
  5. package/schemas/design.schema.json +722 -0
  6. package/schemas/film.schema.json +171 -15
  7. package/schemas/proposal.schema.json +133 -0
  8. package/skills/video-studio/SKILL.md +1316 -1066
  9. package/skills/video-studio/assets/design_fixture.json +141 -0
  10. package/skills/video-studio/assets/film.json +1 -2
  11. package/skills/video-studio/assets/golden_frames.json +12 -9
  12. package/skills/video-studio/assets/scenes.py +2207 -1190
  13. package/skills/video-studio/assets/voice_loudness.json +16 -0
  14. package/skills/video-studio/references/audio-variation.md +15 -11
  15. package/skills/video-studio/references/audio.md +36 -34
  16. package/skills/video-studio/references/change-impact.md +3 -3
  17. package/skills/video-studio/references/frame-qa.md +2 -2
  18. package/skills/video-studio/references/proposal.md +177 -0
  19. package/skills/video-studio/references/quality-gates.md +2 -2
  20. package/skills/video-studio/references/scene-grammar.md +311 -0
  21. package/skills/video-studio/references/sfx-design.md +1 -1
  22. package/skills/video-studio/references/style-packs.md +107 -168
  23. package/skills/video-studio/references/v08-quality.md +8 -8
  24. package/skills/video-studio/references/web-engine.md +1 -1
  25. package/skills/video-studio/references/word-timeline.md +2 -2
  26. package/skills/video-studio/scripts/designkit.py +2120 -0
  27. package/skills/video-studio/scripts/filmcheck.py +104 -33
  28. package/skills/video-studio/scripts/filmkit.py +153 -78
  29. package/skills/video-studio/scripts/grammar.py +619 -0
  30. package/skills/video-studio/scripts/musicgen.py +2043 -0
  31. package/skills/video-studio/scripts/preflight.py +10 -3
  32. package/skills/video-studio/scripts/previewkit.py +849 -0
  33. package/skills/video-studio/scripts/propose.py +825 -0
  34. package/skills/video-studio/scripts/qa_frames.py +45 -10
  35. package/skills/video-studio/scripts/qavmaf.py +77 -11
  36. package/skills/video-studio/scripts/render.py +505 -142
  37. package/skills/video-studio/scripts/scorekit.py +50 -1748
  38. package/skills/video-studio/scripts/selfcheck.py +851 -115
  39. package/skills/video-studio/scripts/stagewatch.py +21 -5
  40. package/skills/video-studio/scripts/stylekit.py +293 -570
  41. package/skills/video-studio/scripts/voicekit.py +502 -380
  42. package/skills/video-studio/scripts/webengine.py +15 -14
  43. package/tools/audio_similarity.py +57 -30
  44. package/tools/ci_check.py +9 -1
  45. package/tools/estimate.py +14 -8
  46. package/tools/golden_frames.py +56 -11
  47. package/tools/silhouette_qa.py +1263 -0
  48. package/docs/demo-pil-sheet.png +0 -0
  49. package/docs/styles/demo-results.json +0 -76
  50. package/docs/styles/sheet-8-styles.png +0 -0
  51. package/docs/styles/sheet-ai.png +0 -0
  52. package/docs/styles/sheet-craft.png +0 -0
  53. package/docs/styles/sheet-night.png +0 -0
  54. package/skills/video-studio/assets/score_demo.json +0 -307
@@ -43,7 +43,12 @@ STAGE_IO = {
43
43
  # 开了 --strict-stale 就直接失败,而 --stage style 是全新项目的第一条生产命令。
44
44
  # legacy 剧本本来就不写这个文件:check() 只在「上次记录的是具体指纹、现在没了」
45
45
  # 时才报 output-missing,所以 legacy 下记为 missing 不会被当成永久过时。
46
- "style": dict(sources=["script"], inputs=[], outputs=["style.json"]),
46
+ # v1.0 提案层:proposal.json / design.json 由 propose.py 写(不经 render.py),
47
+ # 但**style 与 frames 都必须读它**——所以挂在 style 的 sources 里当"源头输入",
48
+ # 并在 frames 的 inputs 里再要一次 design.json(改设计 = 画面必须重渲)。
49
+ # 为什么放 sources 而不是 inputs:它不是 render.py 的任何 stage 产出的,
50
+ # 按 inputs 记会永远报"产物缺失"(proposal 还没跑时)。
51
+ "style": dict(sources=["script", "design"], inputs=[], outputs=["style.json"]),
47
52
  "tts": dict(sources=["script"], inputs=["style.json"],
48
53
  outputs=["tts.json", "voice_plan.json"]),
49
54
  "layout": dict(sources=["script"],
@@ -57,7 +62,7 @@ STAGE_IO = {
57
62
  "audio": dict(sources=["script"],
58
63
  inputs=["tts.json", "timeline.json", "music.wav", "sfx.wav"],
59
64
  outputs=["audio.wav"]),
60
- "frames": dict(sources=["script", "scenes"],
65
+ "frames": dict(sources=["script", "scenes", "design"],
61
66
  inputs=["timeline.json", "audio.wav", "cues.json"],
62
67
  outputs=["silent.mp4"]),
63
68
  "mux": dict(sources=["script"], inputs=["silent.mp4", "audio.wav"], outputs=[]),
@@ -146,10 +151,21 @@ HARD_KINDS = ("source-changed", "output-missing", "no-manifest", "input-stale")
146
151
  SOFT_KINDS = ("input-pending", "source-pending")
147
152
 
148
153
 
154
+ SRC_LABEL = {"script": "剧本 film.json",
155
+ "scenes": "画面代码 scenes.py",
156
+ "design": "设计 design.json(propose.py --confirm 冻结的那份)"}
157
+
158
+
149
159
  def _src_fp(kind, sources):
150
- """源头输入指纹:script=剧本(film.json)、scenes=场景代码(scenes.py)。"""
160
+ """源头输入指纹:script=剧本、scenes=场景代码、design=冻结设计。"""
151
161
  p = (sources or {}).get(kind)
152
- return _fp(p, ".") if p else "missing"
162
+ if not p:
163
+ return "missing"
164
+ return _fp(p, ".")
165
+
166
+
167
+ def _src_label(kind):
168
+ return SRC_LABEL.get(str(kind), str(kind))
153
169
 
154
170
 
155
171
  def snapshot(work, stage, sources=None):
@@ -236,7 +252,7 @@ def check(work, stage, sources=None, self_built=False, pending=(), _seen=None):
236
252
  was = old_src.get(kind, "missing")
237
253
  if now == was:
238
254
  continue
239
- fname = {"script": "剧本 film.json", "scenes": "画面代码 scenes.py"}.get(kind, kind)
255
+ fname = _src_label(kind)
240
256
  if str(stage) in planned:
241
257
  # 源头变了 + 本轮马上就要重跑本阶段 = 正常待办,不是过时。
242
258
  # 不软化的话,「改一句台词 -> --stage all --strict-stale」会在第一个 stage