diff --git a/app/api/scene-fusion/route.ts b/app/api/scene-fusion/route.ts index fe692e911..62cd8a290 100644 --- a/app/api/scene-fusion/route.ts +++ b/app/api/scene-fusion/route.ts @@ -328,58 +328,66 @@ export async function POST(request: Request) { }) ); - // 6. 并发处理所有场景 - const results = await Promise.all( - processedScenes.map(async (scene) => { + // 6. 串行处理所有场景,每次间隔5秒 + const results = []; + + for (let i = 0; i < processedScenes.length; i++) { + const scene = processedScenes[i]; + + // 如果不是第一张图,等待5秒 + if (i > 0) { + console.log(`[SceneFusion] Waiting 5 seconds before processing scene ${i + 1}/${processedScenes.length}...`); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + + try { + const result = await processScene( + productImageUrl, + scene.imageUrl, + scene.customPrompt, + config.defaultPrompt, + provider.baseUrl, + provider.apiKey, + model.modelId + ); + + // 保存到数据库 + const messageId = `scene-fusion-${Date.now()}-${scene.id}`; + const chatId = `scene-fusion-batch-${Date.now()}`; + try { - const result = await processScene( - productImageUrl, - scene.imageUrl, - scene.customPrompt, - config.defaultPrompt, - provider.baseUrl, - provider.apiKey, - model.modelId - ); - - // 保存到数据库 - const messageId = `scene-fusion-${Date.now()}-${scene.id}`; - const chatId = `scene-fusion-batch-${Date.now()}`; - - try { - await db.insert(generatedImage).values({ - userId: session.user.id, - chatId, - messageId, - thumbnailUrl: result.thumbnail, - originalUrl: result.original, - imageSize: "2K", - prompt: scene.customPrompt - ? `${config.defaultPrompt} ${scene.customPrompt}` - : config.defaultPrompt, - modelId: model.modelId, - }); - console.log(`[SceneFusion] Saved image to gallery: ${result.original.substring(0, 80)}...`); - } catch (dbError) { - console.error("[SceneFusion] Failed to save to gallery:", dbError); - } - - return { - id: scene.id, - status: "completed" as const, - result: result.thumbnail, // 返回缩略图用于预览 - originalUrl: result.original, // 原图用于下载 - }; - } catch (error) { - console.error(`[SceneFusion] Failed to process scene ${scene.id}:`, error); - return { - id: scene.id, - status: "failed" as const, - error: error instanceof Error ? error.message : "处理失败", - }; + await db.insert(generatedImage).values({ + userId: session.user.id, + chatId, + messageId, + thumbnailUrl: result.thumbnail, + originalUrl: result.original, + imageSize: "2K", + prompt: scene.customPrompt + ? `${config.defaultPrompt} ${scene.customPrompt}` + : config.defaultPrompt, + modelId: model.modelId, + }); + console.log(`[SceneFusion] Saved image to gallery: ${result.original.substring(0, 80)}...`); + } catch (dbError) { + console.error("[SceneFusion] Failed to save to gallery:", dbError); } - }) - ); + + results.push({ + id: scene.id, + status: "completed" as const, + result: result.thumbnail, // 返回缩略图用于预览 + originalUrl: result.original, // 原图用于下载 + }); + } catch (error) { + console.error(`[SceneFusion] Failed to process scene ${scene.id}:`, error); + results.push({ + id: scene.id, + status: "failed" as const, + error: error instanceof Error ? error.message : "处理失败", + }); + } + } // 6. 返回结果 const successCount = results.filter((r) => r.status === "completed").length;