tonhowtf/omniget · error

Instagram Stories are not supported. Only public posts…

Error message

Instagram Stories are not supported. Only public posts, reels and carousels.

What it means

get_media_info explicitly rejects Instagram story URLs before any network work. is_story_url detects /stories/ path patterns, and when matched, the downloader refuses with a fixed message because stories require authentication and ephemeral API access that this platform implementation does not support.

Solutions

  1. Don't pass story URLs to this downloader; filter them out in the caller.
  2. Pre-validate the URL path (reject /stories/) in your own UI before invoking get_media_info.
  3. For stories support, integrate an authenticated extraction path (e.g. yt-dlp with session cookies) instead of this platform handler.
  4. Communicate the supported scope (public posts, reels, carousels) to end users.

Example fix

// before
let info = downloader.get_media_info(url).await?;
// after
if url.contains("/stories/") {
    anyhow::bail!("Instagram Stories are not supported by this downloader");
}
let info = downloader.get_media_info(url).await?;
Defensive patterns

Strategy: validation

Validate before calling

// Rust: reject story URLs before invoking the downloader
fn is_story(url: &str) -> bool {
    url::Url::parse(url).ok()
        .and_then(|u| u.path().strip_prefix("/stories/").map(|_| true))
        .unwrap_or(false)
}
if is_story(url) { /* show 'stories unsupported' message, skip call */ }

Try / catch

match downloader.get_media_info(url).await {
    Err(e) if e.to_string().contains("Stories are not supported") => {
        ui.show_message("Instagram Stories are not supported; paste a post, reel or carousel link.");
    }
    other => other?,
}

Prevention

When it happens

Trigger: Calling get_media_info (or the download flow that routes URLs to PlatformDownloader::can_handle) with an Instagram URL containing a story path, e.g. https://www.instagram.com/stories/<user>/<id>/, or via ddinstagram mirrors of story links.

Common situations: User pastes a story link into the app expecting it to behave like a post; share links that redirect to a story; automation feeding arbitrary Instagram URLs without pre-filtering story paths.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

Thrown at src-tauri/omniget-core/src/platforms/instagram.rs:676

        "instagram"
    }

    fn can_handle(&self, url: &str) -> bool {
        if let Ok(parsed) = url::Url::parse(url) {
            if let Some(host) = parsed.host_str() {
                let host = host.to_lowercase();
                return host == "instagram.com"
                    || host.ends_with(".instagram.com")
                    || host == "ddinstagram.com"
                    || host.ends_with(".ddinstagram.com");
            }
        }
        false
    }

    async fn get_media_info(&self, url: &str) -> anyhow::Result<MediaInfo> {
        if Self::is_story_url(url) {
            return Err(anyhow!(
                "Instagram Stories are not supported. Only public posts, reels and carousels."
            ));
        }

        let post_id = if let Some(share_id) = Self::extract_share_id(url) {
            let resolved = self.resolve_share_link(&share_id).await?;
            Self::extract_post_id(&resolved).ok_or_else(|| anyhow!("Could not extract post ID"))?
        } else {
            Self::extract_post_id(url).ok_or_else(|| anyhow!("Could not extract post ID"))?
        };

        let filename_base = format!("instagram_{}", post_id);

        let embed_result = self.request_embed(&post_id).await;
        let media = match embed_result {
            Ok(data) => Self::extract_media_from_embed(&data),
            Err(_embed_err) => match self.request_gql(&post_id).await {
                Ok(data) => Self::extract_media_from_gql(&data),

View on GitHub (pinned to 8600b91f42)