#Download broken, with fix

1 messages · Page 1 of 1 (latest)

trim rivetBOT
#

Reported by @hollow stirrup

Bug Report: Download broken, with fix
`Steps to Reproduce`

try to download in SORA2

`Expected Result`

download video

`Actual Result`

CORS error

`Environment`

all

#
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.

hollow stirrup
#

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:

https://sora.chatgpt.com

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

  1. 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.

  1. 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.

  1. 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.

  1. 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)?