@lightcone-ai/daemon 0.15.29 → 0.15.31
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.
|
@@ -1038,6 +1038,7 @@ export function planVideo({
|
|
|
1038
1038
|
|
|
1039
1039
|
return {
|
|
1040
1040
|
version: 'video-narration-plan/v1',
|
|
1041
|
+
plan_video_version: 1,
|
|
1041
1042
|
target_platform: profile.id,
|
|
1042
1043
|
persona: normalizedPersona,
|
|
1043
1044
|
core_message: coreMessage,
|
|
@@ -1349,6 +1350,14 @@ export async function detailSections({
|
|
|
1349
1350
|
env = process.env,
|
|
1350
1351
|
fetchFn = globalThis.fetch,
|
|
1351
1352
|
} = {}) {
|
|
1353
|
+
if (isPlainObject(strategy) && !strategy.plan_video_version) {
|
|
1354
|
+
throw new Error(
|
|
1355
|
+
'pipeline_violation: strategy must come from plan_video output. '
|
|
1356
|
+
+ 'Required pipeline: analyze_page → plan_video → detail_sections → record_url_narration → compose_video → submit_to_library. '
|
|
1357
|
+
+ 'Do not hand-write strategy or bypass plan_video.'
|
|
1358
|
+
);
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1352
1361
|
const profile = getPlatformProfile(strategy?.target_platform);
|
|
1353
1362
|
const phases = normalizePhaseList(strategy);
|
|
1354
1363
|
|
package/package.json
CHANGED
package/src/chat-bridge.js
CHANGED
|
@@ -1472,7 +1472,7 @@ server.tool('record_url_narration',
|
|
|
1472
1472
|
'Record a silent video of a URL by orchestrating Xvfb + Chromium + ffmpeg, driven by a video plan. Outputs a silent mp4 plus an events.json timestamp log that compose_video can use to align audio segments.\n\nUse this as the canonical recording step for URL-narration videos. Falls back: if the page needs interactions outside the visual_action vocabulary (clicks, waits, OCR loops), use Monitor (Bash) with custom Playwright instead.\n\nRuntime requirements: this tool only works on a Linux daemon machine with Xvfb + ffmpeg (x11grab) + Chromium installed. macOS / Windows daemons will fail at startup.',
|
|
1473
1473
|
{
|
|
1474
1474
|
url: z.string().describe('Page URL to record'),
|
|
1475
|
-
plan: z.record(z.any()).describe('
|
|
1475
|
+
plan: z.record(z.any()).describe('Must be the full output from detail_sections (not plan_video). detail_sections output includes detail_sections_version, sections[], audio metadata, and dwell_ms per phase.'),
|
|
1476
1476
|
output_path: z.string().optional().describe('Workspace-relative output mp4 path. Default tmp/wx3_video/recorded-{ts}.mp4'),
|
|
1477
1477
|
events_path: z.string().optional().describe('Workspace-relative events.json path. Default ${output_path}.events.json'),
|
|
1478
1478
|
viewport: z.object({
|
|
@@ -1511,7 +1511,7 @@ server.tool('compose_video',
|
|
|
1511
1511
|
text: z.string().describe('Subtitle text for this segment (the narration sentence).'),
|
|
1512
1512
|
start_ms: z.number().describe('Subtitle start time in milliseconds.'),
|
|
1513
1513
|
end_ms: z.number().describe('Subtitle end time in milliseconds.'),
|
|
1514
|
-
})).optional().describe('Subtitle segments to burn into the video. Pass each phase
|
|
1514
|
+
})).optional().describe('Subtitle segments to burn into the video. Pass each phase sentence text (from detail_sections sections[].sentence) with cumulative start/end time derived from dwell_ms. Omit to produce no subtitles.'),
|
|
1515
1515
|
outro_path: z.string().optional().describe('Optional outro mp4 path. If omitted, uses ~/.lightcone/assets/outros/default.mp4 when present.'),
|
|
1516
1516
|
target: z.enum(['short_video_cn', 'douyin', 'xhs']).optional().describe('Transcode target profile. Defaults to short_video_cn.'),
|
|
1517
1517
|
},
|
|
@@ -55,7 +55,7 @@ function assertPipelineCompliance(plan) {
|
|
|
55
55
|
if (!plan[PIPELINE_SENTINEL_KEY]) {
|
|
56
56
|
throw new Error(
|
|
57
57
|
'pipeline_violation: plan must come from detail_sections output. '
|
|
58
|
-
+ 'Required pipeline: analyze_page → plan_video → detail_sections →
|
|
58
|
+
+ 'Required pipeline: analyze_page → plan_video → detail_sections → record_url_narration → compose_video → submit_to_library. '
|
|
59
59
|
+ 'Do not hand-write phases or bypass detail_sections.'
|
|
60
60
|
);
|
|
61
61
|
}
|