nexu-io/open-design · error · Error
volcengine video fetch ${dlResp.status}
Error message
volcengine video fetch ${dlResp.status} What it means
Thrown when downloading the produced video bytes from the temporary `video_url` Volcengine returned fails (`!dlResp.ok`). The temp URL is only valid ~24h, so the dispatcher streams bytes immediately; a non-2xx here usually means the URL expired, the CDN errored, or access was revoked.
Source
Thrown at apps/daemon/src/media/index.ts:1519
if (typeof onProgress === 'function') {
const elapsedSec = Math.round((Date.now() - startedAt) / 1000);
onProgress(`volcengine task ${taskId} status=${lastStatus || 'pending'} (elapsed ${elapsedSec}s)`);
}
if (lastStatus === 'succeeded') {
videoUrl = pollData?.content?.video_url || null;
break;
}
if (lastStatus === 'failed' || lastStatus === 'cancelled') {
const reason = pollData?.error?.message || lastStatus;
throw new Error(`volcengine task ${lastStatus}: ${reason}`);
}
}
if (!videoUrl) {
throw new Error(`volcengine task did not finish in time (last status: ${lastStatus || 'unknown'})`);
}
const dlResp = await fetch(videoUrl, withMediaRequestInit(ctx));
if (!dlResp.ok) throw new Error(`volcengine video fetch ${dlResp.status}`);
const arr = await dlResp.arrayBuffer();
const bytes = Buffer.from(arr);
return {
bytes,
providerNote: `volcengine/${ctx.wireModel} · ${ratio} · ${durationSec}s · ${bytes.length} bytes`,
suggestedExt: '.mp4',
};
}
function volcengineRatioFor(aspect?: string): string {
// Seedance accepts a fixed list of ratios; map the OD vocabulary to
// its canonical strings.
if (!aspect) return '16:9';
if (aspect === '1:1' || aspect === '16:9' || aspect === '9:16' || aspect === '4:3' || aspect === '3:4') {
return aspect;
}
return '16:9';View on GitHub (pinned to 5be4028344)
Solutions
- Retry the render; the download step is idempotent against transient CDN errors.
- Ensure the Volcengine object-storage/CDN host is reachable from the daemon host.
- If persistent, check whether the region's storage endpoint is allowlisted.
Defensive patterns
Strategy: retry
Try / catch
// The succeeded task id is useless once the URL fetch fails — retry the whole render.
try { return await renderVolcengineVideo(ctx, credentials, onProgress); }
catch (err) {
const msg = err instanceof Error ? err.message : String(err);
if (/video fetch 5\d{2}/.test(msg)) { return await renderVolcengineVideo(ctx, credentials, onProgress); }
throw err;
} Prevention
- Treat CDN download failures as transient and retry.
- Allowlist the Volcengine object-storage/CDN host on restricted networks.
- Avoid pausing the process between task success and the download step.
When it happens
Trigger: `dlResp.ok === false` on the `GET videoUrl` after the task succeeded. Causes: the signed/expiring URL already invalidated (rare within the same render), the object-storage CDN returned a transient 5xx, or a network/proxy blocked the object-storage host.
Common situations: (1) Object-storage CDN transient 5xx; (2) network policy blocking the Volcengine CDN domain; (3) unusually long delay between task success and download (paused process, clock skew).
Related errors
- volcengine task create ${taskResp.status}: ${truncate(taskTe
- volcengine poll ${pollResp.status}: ${truncate(pollText, 240
- volcengine task ${lastStatus}: ${reason}
- volcengine task did not finish in time (last status: ${lastS
- no Volcengine Ark API key — configure it in Settings or set
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/eb2a4d2b9709e024.
Report an issue: GitHub.