Skip to content

Clean up duplicates and missing files with the Health views

Libraries collect clutter: the same texture shipped in two packs, files you moved or deleted outside the app. The Health section at the bottom of the sidebar counts both. In this tutorial you resolve a duplicate, then fix an asset whose file went missing, once by pointing it at the file’s new place and once by removing it from the library, and see what undo can and can’t reverse.

You need: the app with a library that has finished scanning. Duplicates are found by comparing file contents, which happens in the background right after a scan (“hashing”), so wait until the status bar says Ready. The screenshots use a small demo library where wood_planks.png ships in both “Stone and Wood Textures” and “Low Poly Props”, and where jump.wav from “Retro Sound Effects” goes missing.

Time: about ten minutes.

Scroll the sidebar down to Health and click Duplicates. The number next to it is how many groups of identical files the library has. You can also press Cmd/Ctrl+K and run Find duplicates.

The review replaces the grid. The line under the title sums it up: how many groups, how many redundant files and how much space you’d get back. Each card is one group: a thumbnail, the file name, a short form of its SHA-256 fingerprint, the size of one copy, how many copies there are, and Save … for the space that group frees.

The Duplicates review: one group for wood_planks.png with two copies, one in Stone and Wood Textures and one in Low Poly Props; the Health section in the sidebar shows Duplicates 1.

Only files with exactly the same contents end up in a group; two files with the same name but different pixels don’t. Archived assets and missing files are left out. With more than 100 groups, the review shows the 100 that free the most space; resolve those to see the rest.

Each copy is a row with its path (with the library folder’s name in front when the copies are in different folders). One row in every group is marked KEEP, the others REMOVE. Every group starts on the copy with the shortest path; click a row (or its round button) to keep that one instead. Auto-pick: shortest path sets every group back to the shortest path.

Here, keep the copy in Stone and Wood Textures, the pack that’s all about textures.

The wood_planks.png group with the Stone and Wood Textures copy marked KEEP and the Low Poly Props copy marked REMOVE.

Pick with care: the copy you remove leaves the library, and its tags and collection memberships go with it. The review doesn’t show tags, so if one copy is the one you tagged, keep that one.

There are two ways to get rid of the other copies. Both apply to every group on the page at once:

  • Delete others… moves the copies marked REMOVE to the Trash and removes them from the library.
  • Symlink others (macOS and Linux only; the button isn’t there on Windows) moves them to the Trash too, but puts a link to the kept file in their place. The path keeps working and the asset stays in your library (with its tags), it just no longer counts as a duplicate.

Links matter when something else points at the file. In the demo, crate.obj in Low Poly Props uses textures/wood_planks.png from its own folder as its texture. Deleting that copy would leave the crate untextured, so click Symlink others. The confirmation says how many files are replaced and how much space it frees.

The Symlink duplicates confirmation: “Replace 1 file with links to the kept copy in 1 group? This frees 5 KB. The originals go to the Trash. This can’t be undone in the app.” with Cancel and Symlink buttons.

On Windows, or when nothing refers to the duplicates, use Delete others… instead. Its confirmation (“Move 1 file to the Trash and remove them from the library?”) has a Move to Trash button. If you’re on Windows in the same situation as the crate, keep the copy the model uses.

Click Symlink (or Move to Trash). The resolved groups disappear; when none are left, the review says No duplicates. The status bar reports what happened, here “Duplicates: 1 symlinked, 0 errors” (“Duplicates: 1 moved to Trash, 0 errors” for Delete others…), and the Duplicates count in the sidebar drops.

The Duplicates review after resolving: “No duplicates found”, the status bar says “Duplicates: 1 symlinked, 0 errors” and Health shows Duplicates 0.

If a file couldn’t be moved to the Trash (it’s read-only, say), it counts as an error, stays where it is and stays in its group. Click Close or press Esc to go back to the grid.

Press Cmd/Ctrl+Z. Instead of undoing, a notice at the bottom of the window explains that this can’t be undone in the app:

The toast after Cmd+Z: “Can’t undo replacing 1 duplicate with links. The originals are in the Trash.”

After Delete others… it says “Can’t undo moving 1 duplicate to the Trash. Restore them from the Trash to undo.” Pressing Cmd/Ctrl+Z again moves on to the operation before.

To get a file back by hand:

  • After Delete others…, restore the file from the Trash and rescan its folder. It comes back as a new asset, without its old tags and collections.
  • After Symlink others, the asset never left the library. Delete the link, restore the original from the Trash to the same place and rescan.

An asset is marked missing when a scan of its folder doesn’t find the file any more: you moved, renamed or deleted it outside the app. Missing assets drop out of the normal grid and searches but keep their tags, collections and pack, so you can fix them instead of starting over.

To follow along, move jump.wav out of your library folders in Finder or File Explorer (to your desktop, say), then hover Retro Sound Effects in the sidebar’s Folders list and click its Rescan folder button. The status bar ends with “1 missing”.

Click Missing files under Health (or run Show missing files in Cmd/Ctrl+K). The grid shows only the missing assets, with a missing files chip above it.

The grid filtered to Missing files, showing jump.wav; the status bar says “Scan complete · +0 added, 0 updated, 1 missing, 0 ignored” and Health shows Missing files 1.

If a whole drive or network share is offline, every asset on it shows up here. Reconnect it and rescan instead of fixing them one by one.

Click jump.wav. The inspector shows a red MISSING badge, and the preview says the file isn’t on disk any more. Its details, tags and pack are all still there. The reveal button at the bottom of the inspector (the folder icon) is turned off because there’s nothing to reveal. When the whole folder is unreachable instead, say an external drive that isn’t plugged in, the preview names the drive and asks you to connect it.

In this view the selection bar appears with a single asset selected and offers just two actions: Locate… and Remove from library… (renaming, tagging, collecting and archiving a file that isn’t there make no sense).

jump.wav selected in Missing files: the inspector shows the MISSING badge and “This file isn’t on disk anymore.”; the selection bar shows 1 selected, Locate… and Remove from library….

You now have three ways out:

  • Put the file back where it was and rescan the folder. The asset is no longer missing; nothing else changes.
  • Locate… it at a new place inside your library (steps 8 and 9).
  • Remove from library… if it’s gone for good (steps 10 and 11).

Say the file belongs in a new sfx/player/ folder in Retro Sound Effects. Move jump.wav there, then, before you rescan, select the missing asset and click Locate…. A file picker titled Locate jump.wav opens in the last folder you picked in the app. Go to the file, select it and click Open.

The Locate jump.wav file picker showing Retro Sound Effects/sfx/player with jump.wav selected.

Locate only accepts a file that’s inside one of your library folders and isn’t already in the library. That’s why the order matters: a rescan would find sfx/player/jump.wav and add it as a new asset, and Locate would then say “That file is already in the library.” If that happens, keep the new asset and remove the missing one (step 10), then redo its tags. A file outside your library folders gets “Pick a file inside one of your library folders.”

The asset points at the new file and leaves Missing files; the status bar says Located jump.wav. It keeps its tags, collections and pack. Its fingerprint is worked out again after the next scan, so it can join a duplicate group if it matches another file.

Missing files after Locate: “No missing files”, the status bar says “Located jump.wav” and Health shows Missing files 0.

The app doesn’t check that the file you pick is the same one, and Cmd/Ctrl+Z doesn’t undo Locate…. If you picked the wrong file, rename or move the right one into place and rescan.

When the file is gone for good, select the missing asset (or several of them) and click Remove from library…. The confirmation says how many assets go and, when they have any, the tags and collection memberships they lose. It also reminds you that undo works:

The Remove from library confirmation: “Remove 1 asset from the library? Files on disk are not touched. ⌘Z undoes this until you quit.” with Cancel and Remove buttons.

Click Remove. The asset leaves the library (the status bar says “Removed 1 asset from the library”). Files on disk are never touched by this.

Changed your mind? Press Cmd/Ctrl+Z (not while typing in a text field, where it undoes typing). The asset comes back, still missing, with its tags and collection memberships, and a notice says what was undone:

Missing files again showing jump.wav, with the toast “Undid removal of 1 asset from the library”.

Undo works for the rest of the session: up to the last 50 undoable operations, cleared when you quit. It waits while a scan is running (“Wait for the scan to finish, then undo.”). You can also press Cmd/Ctrl+K and pick Undo removal of 1 asset from the library; the command names what it will undo.

You resolved a duplicate texture without breaking the model that uses it, learned that duplicates go to the Trash and can’t be undone in the app, and handled a missing file three ways: put back and rescanned, located at its new place, and removed (then restored with undo).

For the details behind each view:

  • Health views: every Health row, how duplicates are found and what each resolve option does.
  • Bulk actions and undo: everything Cmd/Ctrl+Z can and can’t reverse.
  • Library and scanning: rescanning and file watching, which marks files missing as they disappear.
  • Troubleshooting: files missing after moving a folder, and duplicates that don’t show up.