@lingjingai/scriptctl 0.74.2 → 0.75.0

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.
package/dist/cli.d.ts CHANGED
@@ -57,7 +57,7 @@ type OperationalFailure = FailureClassification & FailureContext & {
57
57
  };
58
58
 
59
59
  type LlmProtocol = "anthropic" | "openai-compatible" | "google-gemini" | "google-vertex";
60
- type LlmTaskId = "direct.episode-titles" | "direct.batch-extract" | "direct.episode-synopsis" | "direct.synopsis-reduction" | "direct.script-synopsis" | "direct.asset-grouping" | "direct.asset-curation" | "direct.asset-curation-audit" | "direct.location-canonicalization" | "direct.state-curation" | "direct.state-binding" | "metadata.global" | "metadata.descriptions" | "synopsis.chunk" | "synopsis.episode" | "synopsis.arc" | "synopsis.script-overview" | "ingest.body-start" | "ingest.arc-summary" | "ingest.text-normalize" | "ingest.episode-assets" | "ingest.name-fix" | "ingest.mention-resolve" | "ingest.asset-extract" | "ingest.asset-curate" | "ingest.asset-recall" | "ingest.asset-refine" | "ingest.state-reconcile" | "ingest.asset-audit" | "ingest.speaker-audit" | "ingest.video-serial" | "ingest.comic-serial";
60
+ type LlmTaskId = "direct.episode-titles" | "direct.batch-extract" | "direct.episode-synopsis" | "direct.synopsis-reduction" | "direct.script-synopsis" | "direct.asset-grouping" | "direct.asset-curation" | "direct.asset-curation-audit" | "direct.location-canonicalization" | "direct.state-curation" | "direct.state-binding" | "metadata.global" | "metadata.descriptions" | "synopsis.chunk" | "synopsis.episode" | "synopsis.arc" | "synopsis.script-overview" | "ingest.body-start" | "ingest.arc-summary" | "ingest.text-normalize" | "ingest.episode-assets" | "ingest.name-fix" | "ingest.mention-resolve" | "ingest.asset-extract" | "ingest.asset-curate" | "ingest.asset-recall" | "ingest.asset-refine" | "ingest.state-reconcile" | "ingest.asset-audit" | "ingest.speaker-audit" | "ingest.video-serial" | "ingest.comic-serial" | "soundtrack.analyze";
61
61
  type JsonSchema = Record<string, unknown>;
62
62
  interface TextGenerationRequest {
63
63
  system: string;
@@ -141,6 +141,8 @@ interface DocumentGenerationRequest {
141
141
  user: string;
142
142
  responseJsonSchema?: JsonSchema;
143
143
  acceptsText?: (text: string) => boolean;
144
+ temperature?: number;
145
+ seed?: number;
144
146
  signal?: AbortSignal;
145
147
  }
146
148
  interface DocumentUnderstandingPort {
@@ -154,6 +156,8 @@ interface VideoGenerationRequest {
154
156
  user: string;
155
157
  fps: number;
156
158
  maxOutputTokens: number;
159
+ temperature?: number;
160
+ seed?: number;
157
161
  responseJsonSchema?: JsonSchema;
158
162
  acceptsText?: (text: string) => boolean;
159
163
  localPath?: string;
package/dist/cli.js CHANGED
@@ -1 +1 @@
1
- import{a,b}from"./chunk-GIHAHL2F.js";export{a as buildProgram,b as main};
1
+ import{a,b}from"./chunk-7AXMHZL5.js";export{a as buildProgram,b as main};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingjingai/scriptctl",
3
- "version": "0.74.2",
3
+ "version": "0.75.0",
4
4
  "description": "剧本阶段统一 CLI:素材转 Script v4,并兼容 Script v3 的本地写作、精修、校验和发布。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -214,11 +214,15 @@ scriptctl review -p "$S" -s <视频目录> --converge-only --resume-log <已有
214
214
  scriptctl review -p "$S" -s <漫画ingest工作区> # 对照 PDF 逐话审核并修正
215
215
  scriptctl create --title "…" -p "$S" # 从零建空剧本
216
216
  scriptctl view -w <workspace> # 渲染或起审阅页
217
+ scriptctl soundtrack -s <视频或目录> --episodes 1,3-5 -w <workspace> # 听音标 BGM、音效的时间和情绪
218
+ scriptctl soundtrack-view -w <workspace> --host <地址> # 起网页服务,看各集汇总,点进去细看
217
219
  scriptctl checkout / status / publish # 远端工作副本
218
220
  ```
219
221
 
220
222
  `ingest` 见 [references/ingest-workflow.md](references/ingest-workflow.md)。
221
223
 
224
+ `soundtrack` 把结果写到 `<workspace>/soundtrack/ep_NNN.json` 和 `ep_NNN.html`,并更新汇总各集的 `index.html`,不碰 `script.json`。`soundtrack-view` 用这个目录起网页服务并一直运行:默认只有本机能打开,默认端口 8766,要在别的电脑上看就用 `--host` 传这台机器的局域网或 Tailscale 地址,这个地址上没有登录保护。单个文件视为一集,`--episodes` 指定它的集号;目录按 `--episodes` 过滤。同一来源重跑沿用已有结果,`--force` 才重新调模型。每集调用 2 次模型:第一轮只听音频定声音和起止,第二轮带清单看视频,给每段写 `emotion`、`on_screen`、`why`、`improve`,一段音乐跨几场戏时按剧情切开。`audio_emotion` 是纯听音频的情绪,`source: video` 的声音是第二轮才补的,可能按画面猜出来,要重点听。有没有和起止以人耳为准。这个任务不走豆包后备。需要 PATH 里有 ffmpeg 和 ffprobe。
225
+
222
226
  单个 PDF 或分话 PDF 目录自动进入漫画 ingest;`--step` 完成下一话,重跑续接已接受进度。漫画正文通过 `extend.scriptctl.source` 保存原 PDF 页码及画格/气泡/文字区域,`view` 可点击正文定位并高亮原页区域。文档模型通过 `ingest.comic-serial` 配置,内置路由为 NNYYAI `gemini-3.8-flash`,使用 `NNYYAI_API_KEY`、base64 PDF 与 `responseSchema`。
223
227
 
224
228
  `ingest` 的 Gemini 文本、结构化工具、视频和 PDF 文档请求先用配置的主模型,再按 3.8 Flash →