{"record":{"id":"aeb8f614ede0498d","repo":"eythaann/Seelen-UI","slug":"wallpaper-wallpaper-id-has-no-filename-skippin","errorCode":null,"errorMessage":"Wallpaper ${wallpaper.id} has no filename, skipping","messagePattern":"Wallpaper (.+?) has no filename, skipping","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/ui/react/settings/components/ThumbnailGeneratorModal/thumbnailGenerator.ts","lineNumber":71,"sourceCode":"  onProgress: ProgressCallback,\n): Promise<void> {\n  const total = wallpapers.length;\n\n  for (let i = 0; i < wallpapers.length; i++) {\n    const wallpaper = wallpapers[i];\n    if (!wallpaper) {\n      continue;\n    }\n\n    onProgress({\n      current: i,\n      total,\n      currentVideoName: getDisplayName(wallpaper),\n    });\n\n    try {\n      if (!wallpaper.filename) {\n        console.warn(`Wallpaper ${wallpaper.id} has no filename, skipping`);\n        continue;\n      }\n\n      const videoSrc = convertFileSrc(wallpaper.metadata.path + \"\\\\\" + wallpaper.filename);\n      const thumbnailBytes = await extractThumbnailFromSource(videoSrc, 0.9);\n      if (!thumbnailBytes) {\n        console.error(`Failed to extract thumbnail for ${wallpaper.id}`);\n        // Mark as corrupted - won't retry during this session\n        $corruptedWallpapers.value = new Set($corruptedWallpapers.value).add(wallpaper.id);\n        continue;\n      }\n\n      await invoke(SeelenCommand.WallpaperSaveThumbnail, {\n        wallpaperId: wallpaper.id,\n        thumbnailBytes: Array.from(thumbnailBytes),\n      });\n    } catch (error) {\n      console.error(`Error generating thumbnail for ${wallpaper.id}:`, error);","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/eythaann/Seelen-UI/blob/dee4aaa94066c5d0888ab25554864862fc47be15/src/ui/react/settings/components/ThumbnailGeneratorModal/thumbnailGenerator.ts#L53-L89","documentation":"In the settings app's ThumbnailGeneratorModal, generateThumbnails() iterates video wallpapers and builds a file path from wallpaper.filename. When a wallpaper entry has an empty/undefined filename it cannot produce a video source, so the item is skipped with this warning and processing continues with the next wallpaper.","triggerScenarios":"A wallpaper in the monitored folders was detected/indexed (so it has an id and metadata.path) but its filename field is empty — e.g. the file was renamed, moved, or the scan entry was created before the filename was resolved.","commonSituations":"Corrupt or stale wallpaper index after moving the wallpaper folder; a file being written/locked during indexing so its name never got recorded; custom wallpapers added via a path where the filename extraction failed; OS/filesystem changes between index time and thumbnail generation.","solutions":["Refresh/rescan the wallpapers folder so the index rebuilds and filenames are repopulated, then regenerate thumbnails.","Remove or re-add the broken wallpaper entry (delete it in Settings > Monitors/Wallpapers or delete and re-copy the file).","Verify the source file actually exists at wallpaper.metadata.path and fix the entry's filename if the index is editable/stale.","If you maintain the code, treat a missing filename as a repairable index defect: re-derive filename from metadata.path before skipping."],"exampleFix":"// before\nif (!wallpaper.filename) {\n  console.warn(`Wallpaper ${wallpaper.id} has no filename, skipping`);\n  continue;\n}\n\n// after\nif (!wallpaper.filename && wallpaper.metadata?.path) {\n  wallpaper.filename = wallpaper.metadata.path.split(\"\\\\\").pop() ?? \"\";\n}\nif (!wallpaper.filename) {\n  console.warn(`Wallpaper ${wallpaper.id} has no filename, skipping`);\n  continue;\n}","handlingStrategy":"validation","validationCode":"const usable = wallpapers.filter(w => typeof w.filename === \"string\" && w.filename.length > 0);\nif (usable.length < wallpapers.length) {\n  console.warn(`${wallpapers.length - usable.length} wallpapers missing filename; refresh the index`);\n}","typeGuard":"function hasFilename(w: Wallpaper): w is Wallpaper & { filename: string } {\n  return typeof w.filename === \"string\" && w.filename.length > 0;\n}","tryCatchPattern":null,"preventionTips":["Rescan/refresh the wallpaper index after moving or renaming wallpaper files.","Filter entries with a filename before starting thumbnail generation and report skipped items to the user.","Re-derive filename from metadata.path when it is missing instead of silently dropping the wallpaper."],"tags":["wallpaper","thumbnails","missing-data","skip"],"backgroundTag":"missing-wallpaper-filename","analyzedSha":"dee4aaa94066c5d0888ab25554864862fc47be15","analyzedAt":"2026-09-03T10:20:37.842Z","contentChangedAt":"2026-09-03T10:20:37.842Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}