
Sora 2 Watermark Remover (AI Inpainting)
Pricing
$300.00 / 1,000 results

Sora 2 Watermark Remover (AI Inpainting)
Under maintenanceRemove the visible Sora 2 watermark from local or hosted URLs. Motion-aware AI inpainting, batch runs, 4K-safe, and a simple API.
0.0 (0)
Pricing
$300.00 / 1,000 results
0
22
22
Last modified
4 days ago
Sora 2 Watermark Cleaner — Drop‑in Video Watermark Removal API
Clean AI‑generated video watermarks with a single HTTP call. This Actor turns watermark removal into a simple, reliable API you can wire into apps, automations, and agent workflows.
Supports both Sora 2 and Sora 2 Pro videos up to 15s in length.
Generations take between 1 to 2 minutes to complete
Clean a local file
Set once:
export APIFY_TOKEN='YOUR_API_TOKEN'export ACTOR_SLUG='tabtablabs~sora-2-watermark-remover'export INPUT_FILE='input_video.mp4'export OUTPUT='output_video.mp4'export KEY="$(basename "${INPUT_FILE}")"
- Local file → upload to store → binary out
# Create a fresh apify storage (returns id)export STORE_ID=$(curl -fsS -X POST "https://api.apify.com/v2/key-value-stores?token=${APIFY_TOKEN}" -H 'content-type: application/json' -d '{}' | jq -r '.data.id')# Upload the video to the newly created storage under ${KEY}curl -fsS -X PUT "https://api.apify.com/v2/key-value-stores/${STORE_ID}/records/${KEY}?token=${APIFY_TOKEN}" -H 'content-type: video/mp4' --data-binary @"${INPUT_FILE}"# Run the Actor and get cleaned MP4 outputcurl -fsS -X POST "https://api.apify.com/v2/acts/${ACTOR_SLUG}/run-sync?token=${APIFY_TOKEN}" -H 'content-type: application/json' -d "{\"kvFileKey\":\"${KEY}\",\"storeId\":\"${STORE_ID}\"}" -o "${OUTPUT}"
Clean an MP4 URL
You can pass in any hosted MP4 URL.
To find the URL directly from Sora, go to https://sora.chatgpt.com
- Open the page that plays your video.
- Open DevTools (Right‑click → Inspect, or Cmd+Opt+I / Ctrl+Shift+I).
- Elements tab: press Cmd/Ctrl+F and search for “webkit-playsinline”.
- Then look for the
src
on the same line.
Example element:
<video playsinline="" webkit-playsinline="" preload="auto" loop="" src="https://videos.openai.com/vg-assets/...=oaivgprodscus" poster="..." style="width: 100%; height: 100%; object-fit: cover;"></video>
Example (truncated/anonymized — copy the full URL you see):
https://videos.openai.com/vg-assets/.../videos/.../md.mp4?...&az=oaivgprodscus
- Remote URL → binary out
export VIDEO_URL='https://videos.openai.com/vg-assets/.../videos/.../md.mp4?...&az=oaivgprodscus'curl -fsSL -X POST \"https://api.apify.com/v2/acts/${ACTOR_SLUG}/run-sync?token=${APIFY_TOKEN}" \-H 'content-type: application/json' \-d "{\"videoUrl\": \"${VIDEO_URL}\"}" \-o "${OUTPUT}"
- JSON workflow → metadata with
publicUrl
curl -fsSL -X POST \"https://api.apify.com/v2/acts/${ACTOR_SLUG}/run-sync-get-dataset-items?token=${APIFY_TOKEN}" \-H 'content-type: application/json' \-d '{"videoUrl":"https://videos.openai.com/vg-assets/.../videos/.../md.mp4?...&az=oaivgprodscus"}'
Other Methods
JavaScript (fetch, binary)
const token = process.env.APIFY_TOKEN;const slug = process.env.ACTOR_SLUG; // e.g., "YOUR_USERNAME~apify"const resp = await fetch(`https://api.apify.com/v2/acts/${slug}/run-sync?token=${token}`, {method: 'POST',headers: { 'content-type': 'application/json' },body: JSON.stringify({ videoUrl: 'https://example.com/video.mp4' })});const buf = Buffer.from(await resp.arrayBuffer());await fs.promises.writeFile('output_video.mp4', buf);
Python (requests, JSON metadata)
import os, requeststoken = os.environ['APIFY_TOKEN']slug = os.environ['ACTOR_SLUG']url = f"https://api.apify.com/v2/acts/{slug}/run-sync-get-dataset-items?token={token}"r = requests.post(url, json={"videoUrl": "https://example.com/video.mp4"})r.raise_for_status()items = r.json().get('items', [])print(items[0]['publicUrl'])
Limitations
- Videos must be less than 32 MB
- This algorithm uses contrast detection for the Sora watermark, scenes with low contrast may not be able to detect the watermark properly.
On this page
Share Actor: