guanghulab/video-ai-system/tools/test-wan-api.js

80 lines
2.3 KiB
JavaScript
Raw Normal View History

/**
* 万相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();