tonhowtf/omniget · warning

vimeo:empty

vimeo:empty

Error message

vimeo:empty

What it means

vimeo:empty is raised by `backup` after enumeration and filtering when the resulting entry list is empty. The URL was valid and enumeration ran, but after applying `only_ids` (and any other filters) zero items remain, so there is nothing to download.

Solutions

  1. Re-enumerate the collection (call `list`) and rebuild `only_ids` from the fresh entry ids.
  2. Verify each id in `opts.only_ids` actually exists in the target collection; drop or fix mismatched ones.
  3. If you did not intend filtering, omit or empty `only_ids` so all enumerated entries are downloaded.
  4. Check that the collection is not empty and that session cookies (session_netscape) are supplied if it is private.

Example fix

// before
await vimeoBackup({ url: showcaseUrl, dest, only_ids: staleIds });
// after
const listing = await vimeoList({ url: showcaseUrl });
const freshIds = listing.entries.map(e => e.id).filter(id => wanted.has(id));
if (freshIds.length === 0) throw new Error("no matching items in this collection");
await vimeoBackup({ url: showcaseUrl, dest, only_ids: freshIds });
Defensive patterns

Strategy: validation

Validate before calling

const listing = await vimeoList({ url: showcaseUrl, session_netscape: cookies });
const available = new Set(listing.entries.map(e => e.id));
const matched = onlyIds.filter(id => available.has(String(id)));
if (matched.length === 0) {
  throw new Error("none of only_ids exist in this collection; refresh your selection");
}

Try / catch

try {
  await vimeoBackup({ url, dest, only_ids: ids });
} catch (e) {
  if (String(e).includes("vimeo:empty")) {
    showNotice("No matching items found — refresh the item list and reselect");
  } else throw e;
}

Prevention

When it happens

Trigger: Calling `backup(opts)` where enumeration returned entries but every entry was removed by `opts.only_ids` filtering — i.e. none of the supplied ids match the enumerated items — or where the collection itself enumerated to zero entries.

Common situations: Stale only_ids from a previous snapshot of the showcase after items were deleted/reordered; ids copied from a different collection; typo'd ids; pointing backup at an empty showcase or a private collection that yields nothing.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/vimeo.rs:949

            Target::Video { id, .. } => id.clone(),
            _ => String::new(),
        };
        (
            id.clone(),
            vec![Entry {
                id,
                title: String::new(),
                url: url.clone(),
                duration: None,
                uploader: None,
            }],
        )
    };
    if !opts.only_ids.is_empty() {
        entries.retain(|e| opts.only_ids.iter().any(|i| i == &e.id));
    }
    if entries.is_empty() {
        return Err(anyhow!("vimeo:empty"));
    }

    // 2. baixar.
    let ffmpeg = crate::core::dependencies::find_tool("ffmpeg").await;
    let total = entries.len();
    let mut items: Vec<ItemResult> = Vec::with_capacity(total);
    let mut ok = 0usize;
    let mut skipped = 0usize;
    let mut failed = 0usize;
    let mut last_command = String::new();

    for (i, entry) in entries.iter().enumerate() {
        let done = i as u64;
        let label = if entry.title.trim().is_empty() {
            entry.id.clone()
        } else {
            entry.title.clone()
        };

View on GitHub (pinned to 8600b91f42)