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
- Re-enumerate the collection (call `list`) and rebuild `only_ids` from the fresh entry ids.
- Verify each id in `opts.only_ids` actually exists in the target collection; drop or fix mismatched ones.
- If you did not intend filtering, omit or empty `only_ids` so all enumerated entries are downloaded.
- 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
- Always re-enumerate with list() immediately before a filtered backup to build fresh only_ids
- Treat only_ids as ephemeral, never persisted across sessions
- Supply session cookies when enumerating private collections so entries are not silently missing
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
- nenhum post foi lido desse blog
- No quality available
- a conta logada não tem nenhuma assinatura ativa (ou a…
- a conta não devolveu nenhuma linha
- a lista voltou vazia — o TikTok não entregou os favoritos…
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)