diff --git a/.claude/skills/video-from-script/scripts/batch-pipeline.js b/.claude/skills/video-from-script/scripts/batch-pipeline.js index 0ae607d..850c9bb 100644 --- a/.claude/skills/video-from-script/scripts/batch-pipeline.js +++ b/.claude/skills/video-from-script/scripts/batch-pipeline.js @@ -20,6 +20,19 @@ const { SKILLS_DIR, ACCOUNTS_DIR, loadConfig, resolveVoice } = require('./lib/pi // output/ 在项目根的父级(美图/output/) const OUTPUT_BASE = path.join(SKILLS_DIR, '..', '..', '..', 'output') +// ============================================================================ +// 工具函数 +// ============================================================================ + +/** 从 batch item 解析草稿地址:自身 draftUrl 优先,否则读子任务 manifest */ +function resolveDraftUrl(item) { + if (item.draftUrl) return item.draftUrl + if (!item.manifestPath) return '' + try { + return readJson(path.resolve(item.manifestPath)).draftUrl || '' + } catch { return '' } +} + // ============================================================================ // CLI 参数解析 // ============================================================================ @@ -259,7 +272,11 @@ function cmdMark(args) { if (args.draftName) item.draftName = args.draftName if (args.forwardCopy) item.forwardCopy = args.forwardCopy if (args.hashtags) item.hashtags = args.hashtags - if (args.draftUrl) item.draftUrl = args.draftUrl + if (args.draftUrl) { + item.draftUrl = args.draftUrl + } else if (args.status === 'completed' && !item.draftUrl) { + item.draftUrl = resolveDraftUrl(item) || undefined + } batch.stats = calcStats(batch.items) writeJson(manifestPath, batch) @@ -376,7 +393,7 @@ function cmdExport(args) { 音色: item.voice || '', 转发文案带话题: forwardFull, 草稿名称: item.draftName || '', - 草稿地址: item.draftUrl || '', + 草稿地址: resolveDraftUrl(item), }) } diff --git a/.claude/skills/video-from-script/scripts/lib/phase-assemble.js b/.claude/skills/video-from-script/scripts/lib/phase-assemble.js index 35726d4..1fc6151 100644 --- a/.claude/skills/video-from-script/scripts/lib/phase-assemble.js +++ b/.claude/skills/video-from-script/scripts/lib/phase-assemble.js @@ -46,12 +46,14 @@ async function phaseAssemble(manifest, manifestPath, options) { try { const { assemble } = require('../capcut_assemble') + const { BASE_URL } = require('./capcut-api') const result = await assemble(assembleArgs) // 保存草稿地址到 manifest,供批量导出使用 - if (result && result.draftUrl) { - manifest.draftUrl = result.draftUrl + // 用 BASE_URL + draft_id 构造公网可下载的绝对路径 + if (result && result.draftId) { + manifest.draftUrl = `${BASE_URL}/get_draft?draft_id=${result.draftId}` fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8') - log('assemble', `草稿地址已保存: ${result.draftUrl}`) + log('assemble', `草稿地址已保存: ${manifest.draftUrl}`) } log('assemble', '成片完成') } catch (err) {