@dsh-gis/dsh-video-studio-skill 0.9.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 (55) hide show
  1. package/CHANGELOG.md +424 -0
  2. package/README.md +287 -327
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/package.json +9 -10
  5. package/schemas/design.schema.json +722 -0
  6. package/schemas/film.schema.json +4 -15
  7. package/schemas/proposal.schema.json +133 -0
  8. package/skills/video-studio/SKILL.md +1316 -1123
  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 +11 -8
  12. package/skills/video-studio/assets/scenes.py +67 -22
  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 +1 -1
  20. package/skills/video-studio/references/scene-grammar.md +28 -23
  21. package/skills/video-studio/references/sfx-design.md +1 -1
  22. package/skills/video-studio/references/style-packs.md +95 -257
  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 +7 -33
  28. package/skills/video-studio/scripts/filmkit.py +153 -78
  29. package/skills/video-studio/scripts/grammar.py +67 -7
  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 +472 -154
  37. package/skills/video-studio/scripts/scorekit.py +50 -1748
  38. package/skills/video-studio/scripts/selfcheck.py +658 -131
  39. package/skills/video-studio/scripts/stagewatch.py +21 -5
  40. package/skills/video-studio/scripts/stylekit.py +265 -741
  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 +7 -1
  45. package/tools/estimate.py +14 -8
  46. package/tools/golden_frames.py +56 -11
  47. package/tools/silhouette_qa.py +521 -168
  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-before-after.png +0 -0
  53. package/docs/styles/sheet-craft.png +0 -0
  54. package/docs/styles/sheet-night.png +0 -0
  55. package/skills/video-studio/assets/score_demo.json +0 -307
Binary file
@@ -1,76 +0,0 @@
1
- {
2
- "generated": "2026-11-09",
3
- "demos": [
4
- {
5
- "demo": "ai",
6
- "title": "科技深蓝",
7
- "style": "tech-deep",
8
- "bpm": 116,
9
- "key": "Em",
10
- "mood": "steady",
11
- "duration": 17.26,
12
- "personas": [
13
- "young_male",
14
- "narrator_male",
15
- "narrator_female"
16
- ],
17
- "tones": [
18
- "emphasis",
19
- "body",
20
- "quote",
21
- "outro"
22
- ],
23
- "layouts": [
24
- "left-stack",
25
- "split-right"
26
- ],
27
- "spectral_centroid_hz": 5784
28
- },
29
- {
30
- "demo": "craft",
31
- "title": "手绘纸感",
32
- "style": "paper",
33
- "bpm": 88,
34
- "key": "G",
35
- "mood": "hopeful",
36
- "duration": 19.855,
37
- "personas": [
38
- "narrator_female",
39
- "warm_female"
40
- ],
41
- "tones": [
42
- "hook",
43
- "body",
44
- "outro"
45
- ],
46
- "layouts": [
47
- "left-stack",
48
- "center-stack"
49
- ],
50
- "spectral_centroid_hz": 4899.4
51
- },
52
- {
53
- "demo": "night",
54
- "title": "暖灰薄荷",
55
- "style": "lo-fi",
56
- "bpm": 84,
57
- "key": "F",
58
- "mood": "calm",
59
- "duration": 20.108,
60
- "personas": [
61
- "warm_female",
62
- "narrator_female"
63
- ],
64
- "tones": [
65
- "hook",
66
- "body",
67
- "outro"
68
- ],
69
- "layouts": [
70
- "left-stack",
71
- "split-right"
72
- ],
73
- "spectral_centroid_hz": 5573.8
74
- }
75
- ]
76
- }
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,307 +0,0 @@
1
- {
2
- "version": 1,
3
- "generator": "scorekit 0.3.0",
4
- "note": "scorekit 演示配乐(48 s,4 段,120 BPM,D 小调)。anchors 自动分段:段落边界吸附小节线,交界处 1 小节过门(鼓加花/反向镲/上升音/重击)+ 自动吸气;峰值 -1.5 dBFS、结尾 2 s 淡出;同一 seed 逐采样一致(无采样、全合成)。",
5
- "reproduce": {
6
- "json": "python - <<PY\nimport json, scorekit as K\nanchors = [{\"id\": \"d01\", \"kind\": \"hook\", \"start\": 0.0, \"end\": 8.0}, {\"id\": \"d02\", \"kind\": \"body\", \"start\": 8.0, \"end\": 24.0}, {\"id\": \"d03\", \"kind\": \"drive\", \"start\": 24.0, \"end\": 40.0}, {\"id\": \"d04\", \"kind\": \"outro\", \"start\": 40.0, \"end\": 48.0}]\nx, rep = K.render(48.0, bpm=120, key='Dm', anchors=anchors, seed=7)\nK.save('work/score_demo.wav', x)\nPY",
7
- "cli": "cd skills/video-studio/scripts && python scorekit.py --duration 48 --bpm 120 --key Dm --seed 7 --anchors work/score_demo_anchors.json --out work/score_demo.wav --report work/score_demo.json",
8
- "anchors_file_example": [
9
- {
10
- "id": "d01",
11
- "kind": "hook",
12
- "start": 0.0,
13
- "end": 8.0
14
- },
15
- {
16
- "id": "d02",
17
- "kind": "body",
18
- "start": 8.0,
19
- "end": 24.0
20
- },
21
- {
22
- "id": "d03",
23
- "kind": "drive",
24
- "start": 24.0,
25
- "end": 40.0
26
- },
27
- {
28
- "id": "d04",
29
- "kind": "outro",
30
- "start": 40.0,
31
- "end": 48.0
32
- }
33
- ]
34
- },
35
- "meas": {
36
- "wav": "work/score_demo.wav # 用 reproduce 里的命令自己生成",
37
- "peak_dbfs": -1.5,
38
- "lufs_approx": -19.8,
39
- "true_peak_dbtp": -1.4,
40
- "real_lufs_ffmpeg_demo48": -18.45,
41
- "real_lufs_ffmpeg_60s": -19.09,
42
- "real_lufs_ffmpeg_389s": -18.52,
43
- "real_true_peak_60s_dbtp": -1.4,
44
- "real_true_peak_389s_dbtp": -1.44,
45
- "lra_389s_lu": 4.9,
46
- "render_s": 5.115,
47
- "render_389s_s": 8.18,
48
- "note": "389 s 实测:渲染 8.18 s(含并行负载;空载 6.7 s)、峰值 -1.5 dBFS、ffmpeg loudnorm -18.52 LUFS / -1.44 dBTP;48 s demo 实测 -18.45 LUFS。",
49
- "render_s_note": "本机实测值,随机器/负载浮动;不是承诺"
50
- },
51
- "bpm": 120.0,
52
- "key": "Dm",
53
- "key_name": "D 小调",
54
- "sr": 48000,
55
- "duration": 48.0,
56
- "seed": 7,
57
- "bar_s": 2.0,
58
- "beat_s": 0.5,
59
- "sections": [
60
- {
61
- "name": "d01",
62
- "start": 0.0,
63
- "end": 8.0,
64
- "energy": 0.3,
65
- "bars": 4,
66
- "target_db": -5.95,
67
- "target_lufs": -21.9,
68
- "layers": [
69
- "pad",
70
- "bass"
71
- ],
72
- "chords": [
73
- "i",
74
- "VI",
75
- "iv",
76
- "v"
77
- ]
78
- },
79
- {
80
- "name": "d02",
81
- "start": 8.0,
82
- "end": 24.0,
83
- "energy": 0.55,
84
- "bars": 8,
85
- "target_db": -3.82,
86
- "target_lufs": -19.8,
87
- "layers": [
88
- "pad",
89
- "bass",
90
- "kick",
91
- "hat",
92
- "arp"
93
- ],
94
- "chords": [
95
- "i",
96
- "VI",
97
- "III",
98
- "VII",
99
- "i",
100
- "VI",
101
- "III",
102
- "V"
103
- ]
104
- },
105
- {
106
- "name": "d03",
107
- "start": 24.0,
108
- "end": 40.0,
109
- "energy": 0.8,
110
- "bars": 8,
111
- "target_db": -1.7,
112
- "target_lufs": -17.7,
113
- "layers": [
114
- "pad",
115
- "bass",
116
- "kick",
117
- "hat",
118
- "arp",
119
- "melody"
120
- ],
121
- "chords": [
122
- "i",
123
- "VII",
124
- "VI",
125
- "V",
126
- "i",
127
- "VII",
128
- "VI",
129
- "V"
130
- ]
131
- },
132
- {
133
- "name": "d04",
134
- "start": 40.0,
135
- "end": 48.0,
136
- "energy": 0.35,
137
- "bars": 4,
138
- "target_db": -5.53,
139
- "target_lufs": -21.5,
140
- "layers": [
141
- "pad",
142
- "bass",
143
- "kick"
144
- ],
145
- "chords": [
146
- "i",
147
- "VI",
148
- "I",
149
- "I"
150
- ]
151
- }
152
- ],
153
- "transitions": [
154
- {
155
- "t": 8.0,
156
- "from": "d01",
157
- "to": "d02",
158
- "fill_start": 6.0,
159
- "fill_s": 2.0,
160
- "kinds": [
161
- "鼓加花",
162
- "反向镲",
163
- "上升音"
164
- ],
165
- "suck_db": -4.75
166
- },
167
- {
168
- "t": 24.0,
169
- "from": "d02",
170
- "to": "d03",
171
- "fill_start": 22.0,
172
- "fill_s": 2.0,
173
- "kinds": [
174
- "鼓加花",
175
- "反向镲",
176
- "上升音",
177
- "重击"
178
- ],
179
- "suck_db": -4.75
180
- },
181
- {
182
- "t": 40.0,
183
- "from": "d03",
184
- "to": "d04",
185
- "fill_start": 38.0,
186
- "fill_s": 2.0,
187
- "kinds": [
188
- "鼓加花",
189
- "反向镲"
190
- ],
191
- "suck_db": null
192
- }
193
- ],
194
- "sucks": [
195
- {
196
- "t": 8.0,
197
- "db": -4.75,
198
- "dur": 0.24,
199
- "source": "过渡吸气"
200
- },
201
- {
202
- "t": 24.0,
203
- "db": -4.75,
204
- "dur": 0.24,
205
- "source": "过渡吸气"
206
- }
207
- ],
208
- "beats": [
209
- 0.0,
210
- 0.5,
211
- 1.0,
212
- 1.5,
213
- 2.0,
214
- 2.5,
215
- 3.0,
216
- 3.5,
217
- 4.0,
218
- 4.5,
219
- 5.0,
220
- 5.5,
221
- 6.0,
222
- 6.5,
223
- 7.0,
224
- 7.5,
225
- 8.0,
226
- 8.5,
227
- 9.0,
228
- 9.5,
229
- 10.0,
230
- 10.5,
231
- 11.0,
232
- 11.5,
233
- 12.0,
234
- 12.5,
235
- 13.0,
236
- 13.5,
237
- 14.0,
238
- 14.5,
239
- 15.0,
240
- 15.5,
241
- 16.0,
242
- 16.5,
243
- 17.0,
244
- 17.5,
245
- 18.0,
246
- 18.5,
247
- 19.0,
248
- 19.5,
249
- 20.0,
250
- 20.5,
251
- 21.0,
252
- 21.5,
253
- 22.0,
254
- 22.5,
255
- 23.0,
256
- 23.5,
257
- 24.0,
258
- 24.5,
259
- 25.0,
260
- 25.5,
261
- 26.0,
262
- 26.5,
263
- 27.0,
264
- 27.5,
265
- 28.0,
266
- 28.5,
267
- 29.0,
268
- 29.5,
269
- 30.0,
270
- 30.5,
271
- 31.0,
272
- 31.5,
273
- 32.0,
274
- 32.5,
275
- 33.0,
276
- 33.5,
277
- 34.0,
278
- 34.5,
279
- 35.0,
280
- 35.5,
281
- 36.0,
282
- 36.5,
283
- 37.0,
284
- 37.5,
285
- 38.0,
286
- 38.5,
287
- 39.0,
288
- 39.5,
289
- 40.0,
290
- 40.5,
291
- 41.0,
292
- 41.5,
293
- 42.0,
294
- 42.5,
295
- 43.0,
296
- 43.5,
297
- 44.0,
298
- 44.5,
299
- 45.0,
300
- 45.5,
301
- 46.0,
302
- 46.5,
303
- 47.0,
304
- 47.5,
305
- 48.0
306
- ]
307
- }