guanghulab/video-ai-system/tools/test-wan-api.js
冰朔 c077d7d82e
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled
feat(video-ai): D140 万相2.7 API + OpenCV追踪 + 音频分轨 + 自动剪辑控制层
新增引擎:
- engines/wan-api-adapter.js — 阿里百炼万相2.7视频生成(文生+图生)
- engines/planar-tracker.py — OpenCV平面追踪(追踪/稳定/文字贴合/运动数据)
- engines/audio-stem-splitter.js — 音频三轨分离(对白/BGM/SFX)+自动混音建议
- engines/auto-cut-director.js — 自动剪辑控制层(脚本解析→追踪→分轨→合成)
- tools/test-wan-api.js — 万相API测试脚本

更新:
- .env.example — 万相配置模板
- MODEL-ROUTER.hdlp — 万相状态: 待接入→已接入

铸渊 ICE-GL-ZY001 · D140 · 2026-06-23
2026-06-23 15:22:22 +08:00

80 lines
2.3 KiB
JavaScript

/**
* 万相API测试脚本
* D140 · 铸渊 ICE-GL-ZY001
*
* 验证万相2.7文生视频API是否正常工作
* 用法: node tools/test-wan-api.js
*/
const { submitT2VTask, queryWanTask, API_KEY, WAN_T2V_SPEC } = require('../engines/wan-api-adapter');
async function main() {
console.log('=== 万相2.7 API 测试 ===\n');
// 1. 检查密钥
if (!API_KEY) {
console.error('❌ ALIYUN_BAILIAN_API_KEY 未配置');
console.error(' 请在 video-ai-system/.env 中设置');
process.exit(1);
}
console.log('✅ API Key 已配置:', API_KEY.substring(0, 15) + '...');
console.log('✅ 模型:', WAN_T2V_SPEC.model);
// 2. 提交一个简单的测试任务
const testPrompt = '一只小猫在月光下奔跑,毛发随风飘动,背景是星空和湖泊,电影级画面';
console.log('\n📝 测试提示词:', testPrompt);
console.log('⏱ 时长: 5秒 分辨率: 720P 比例: 16:9\n');
try {
const { taskId, preflight } = await submitT2VTask({
prompt: testPrompt,
duration: 5,
resolution: '720P',
ratio: '16:9',
});
console.log('\n✅ 任务提交成功!');
console.log(' Task ID:', taskId);
console.log(' 预校验:', preflight.valid ? '通过' : '失败');
// 3. 轮询查询
console.log('\n⏳ 轮询查询中...\n');
let pollCount = 0;
const maxPolls = 80;
while (pollCount < maxPolls) {
pollCount++;
await new Promise(r => setTimeout(r, 15000)); // 15秒间隔
const result = await queryWanTask(taskId);
if (result.status === 'completed') {
console.log('\n🎉 视频生成成功!');
console.log(' 视频URL:', result.videoUrl);
console.log(' 元数据:', JSON.stringify(result.videoMeta, null, 2));
process.exit(0);
}
if (result.status === 'failed') {
console.error('\n❌ 生成失败:', result.error);
console.error(' 原始响应:', JSON.stringify(result.rawResponse, null, 2).substring(0, 500));
process.exit(1);
}
// 仍在生成
const elapsed = pollCount * 15;
console.log(` [${elapsed}s] 生成中... (task: ${taskId.substring(0, 8)}...)`);
}
console.error('\n⏰ 轮询超时');
process.exit(1);
} catch (err) {
console.error('\n❌ 测试失败:', err.message);
process.exit(1);
}
}
main();