Reported by @hollow stirrup
#Download broken, with fix
1 messages · Page 1 of 1 (latest)
Additional Information
Please provide relevant details to help resolve the issue, such as:
- ChatGPT Shared Link (if applicable).
- Screenshots or videos demonstrating the problem.
-# ➜ Need to contact support? Visit the OpenAI Help Center.
That error trace tells you exactly what’s going on — it’s a CORS (Cross-Origin Resource Sharing) block.
Here’s what’s happening and how to fix or work around it:
🧠 What’s Happening
You’re trying to load this file:
https://videos.openai.com/az/vg-assets/assets%2Ftask_01k7njaezde0x8tq9703sv7vk6.../src.mp4
from a different domain:
The video server (videos.openai.com) doesn’t send the CORS header:
Access-Control-Allow-Origin: https://sora.chatgpt.com
So the browser refuses to give your JavaScript access to the file, even though it exists and responds 200 OK.
That’s why you see:
Access to fetch at ... from origin 'https://sora.chatgpt.com' has been blocked by CORS policy
No 'Access-Control-Allow-Origin' header is present on the requested resource.
🔍 Meaning of Each Error Line
Error Meaning
net::ERR_FAILED 200 (OK) The file exists, but the browser blocked it.
TypeError: Failed to fetch The fetch() or axios call in your JS couldn’t complete due to CORS.
404 on /backend/project_y/cameos/me Likely unrelated — internal app route not found.
window.KeyboardShortcuts log Just a console info/debug message, not an error.
🧰 Fixes or Workarounds
- Server-Side Proxy (Best Solution for Development)
Fetch the video from your own backend (Node/Flask/FastAPI, etc.), then serve it to the frontend with CORS allowed.
Example (Express.js):
import express from "express";
import fetch from "node-fetch";
import cors from "cors";
const app = express();
app.use(cors());
app.get("/video", async (req, res) => {
const url = "https://videos.openai.com/az/vg-assets/...src.mp4?se=...";
const response = await fetch(url);
res.set("Content-Type", "video/mp4");
response.body.pipe(res);
});
app.listen(3000);
Then fetch it from your frontend as:
fetch("http://localhost:3000/video")
✅ This avoids CORS entirely because your browser only talks to your own domain.
- Direct File Download
You can directly access or download the file in the browser address bar — it’s valid until:
2025-10-22T13:33:19Z
After that, the SAS token expires.
- Serve via <video> Tag
If you just want to play it (not manipulate via JS), you can use:
<video src="https://videos.openai.com/az/vg-assets/...src.mp4?se=..." controls></video>
Browsers will stream it fine since <video> tag playback doesn’t require CORS access.
- Local Debug
You can also use curl or wget to fetch and then serve locally:
curl -L -o output.mp4 "https://videos.openai.com/...src.mp4?..."
Then open the file from local disk — no CORS issues.
Would you like me to show you the proxy middleware snippet for your ComfyUI/Ovi local agent setup (so videos like this can be pulled automatically and re-fed into pipelines)?