tonhowtf/omniget · error

Video unavailable or removed.

Error message

Video unavailable or removed.

What it means

translate_ytdlp_error at ytdlp.rs:4468 maps stderr containing 'video unavailable' or 'not available' to this message. yt-dlp reported that the target video cannot be accessed at all — it has been removed, made unavailable, or never existed. The library throws it as a terminal, non-retryable extraction failure.

Solutions

  1. Verify the URL opens in a browser; if not, the video is genuinely gone — stop retrying.
  2. Search for a re-upload or an archive (e.g. Wayback) copy of the media.
  3. If it plays in a browser but fails here, update yt-dlp and retry (client-specific availability quirks).
  4. Confirm the URL/ID was copied correctly and points to the intended page.
Defensive patterns

Strategy: validation

Validate before calling

// Check the URL resolves before enqueueing
const res = await fetch(url, { method: 'HEAD' });
if (res.status === 404 || res.status === 410) throw new Error('Video unavailable — skip without invoking yt-dlp.');

Try / catch

try {
  await download(url);
} catch (e) {
  if (isVideoUnavailable(e)) markDead(url); // terminal: no retries
  else throw e;
}

Prevention

When it happens

Trigger: yt-dlp stderr includes 'video unavailable', 'this video is not available', 'has been removed', 'http error 404', or 'http error 410' while extracting the URL (see the PATTERNS list at ytdlp.rs:4400-4412 that feeds the same family of cases).

Common situations: The uploader deleted the video or set it unavailable; the platform took it down for policy reasons; a typo'd or stale URL/ID; region account restrictions; videos pulled during live-stream end processing.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/e5716eba7f238eb1. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4468

    }
    if lower.contains("nsig extraction failed") || lower.contains("nsig") {
        return anyhow!("Video extraction failed. Update yt-dlp or try again.");
    }
    if lower.contains("cannot parse data")
        || lower.contains("please report this issue")
        || (lower.contains("confirm you are on the latest version") && lower.contains("yt-dlp"))
    {
        return anyhow!(
            "yt-dlp extractor is broken for this site. Update yt-dlp in Settings → Dependencies, then retry."
        );
    }
    if lower.contains("requested format") && lower.contains("not available") {
        return anyhow!(
            "Requested format is not available. The download will retry with a compatible format."
        );
    }
    if lower.contains("video unavailable") || lower.contains("not available") {
        return anyhow!("Video unavailable or removed.");
    }
    if lower.contains("private video") {
        return anyhow!("This video is private.");
    }
    if lower.contains("copyright") {
        return anyhow!("Video blocked due to copyright.");
    }
    if lower.contains("geo") && lower.contains("block") {
        return anyhow!("Video restricted in your region.");
    }
    if lower.contains("timed out") || lower.contains("timeout") {
        return anyhow!("Connection timed out. Check your internet and try again.");
    }
    if lower.contains("ffmpeg") && (lower.contains("not found") || lower.contains("no such file")) {
        return anyhow!("FFmpeg not found. Install FFmpeg to download this format.");
    }
    if lower.contains("unsupported url") || lower.contains("no suitable infojson") {
        return anyhow!("Unsupported URL. Check that the link is correct.");

View on GitHub (pinned to 8600b91f42)