How duplicate detection works
Updated Sep 11, 2026 · 5 min read
Content hashing groups exact copies, a geometry tier catches re-exports, whole folders that hold the same pack collapse into one card, and every group recommends which copy to keep.
Duplicate detection runs when you ask for it: open the Duplicates view and hit Analyze. It is kept out of scanning on purpose, because hashing a terabyte-scale library means reading every byte and that should happen when you choose, not unannounced in the background. The pass gives each model a content hash, a fingerprint derived from the file's actual bytes. Two files with the same hash are the same model, regardless of their names or which folders they live in. That works inside ZIP, RAR, 7Z and TAR/TGZ archives too: a copy buried in a downloaded archive groups with the loose file next to it. And the Duplicates view counts only what belongs there: models and archives. Companion files like images and PDFs are indexed alongside your models but never reported as duplicates, so a preview render repeated across fifty folders can't bury the real findings.
Re-exports: the geometry tier
Rhino duplicate detection is content-only: identical file bytes match, but no geometry fingerprint is generated. For other supported models, exact matches are only the first tier. STL, OBJ, 3MF, FBX and STEP models also get a geometry fingerprint derived from the mesh itself, so the same model re-exported under a different name still groups even though the file bytes differ, as long as the export didn't move it. STL, OBJ, 3MF and FBX are fingerprinted from the mesh they were authored with, so a plain conversion between them matches too; STEP describes CAD surfaces rather than a mesh, so its fingerprint comes from the triangulation Meshory generates and matches other STEP files. The format support matrix lists this per format, alongside thumbnails, 3D preview and archive support. And moved, rotated, rescaled, or re-tessellated near-copies surface separately as likely duplicates for you to review: they never join bulk cleanup unless you look at a group and confirm it. A slicer project of the same model usually lands in that queue, because saving a project typically re-centers the mesh. When every model in a group has exactly the same triangles and only its position changed, Needs review usually labels the group “Same triangles, moved”, so a slicer project saved from an STL is quick to spot. It still waits for your confirmation.
Whole folders that hold the same pack
There is a third level above the file. When two or more folders hold exactly the same set of models, Meshory says so once instead of reporting every file inside them: a pack sold with the same models in four folders becomes a single card naming those four folders, not two hundred file-level matches. Only the models are compared, so the READMEs, preview renders and PDFs can differ freely. The card lists what differs rather than treating it as a mismatch. Because it compares content, a folder-level match works across drives: the same pack on your NAS and on your desktop groups, and the card marks the copy it recommends keeping, preferring a local copy over one on a NAS and a deliberately filed path over a dump folder. The filter bar has a “Whole-folder matches only” switch for when that is the only kind of finding you want to see.
That's how the Duplicates view groups copies together: the dragon you downloaded three times under three names becomes a single entry listing every copy and where it lives, so you can see the redundancy instead of tripping over it. Your library itself is untouched; each file stays right where it is.
Cleaning up, with a recommended keeper
Detection only ever reads, and it sorts before you do: every group marks one copy as Recommended and says why. Recommended goes to the copy in your organized folder rather than a downloads pile, the oldest copy, or the copy inside an archive, which can't be trashed on its own anyway. Keep recommended selects the rest of the group in one click, and Auto-select recommended everywhere applies the same rule across all groups at once; likely duplicates sitting in Needs review are never included. Cleaning up stays a step you take: choose Move to Trash and the selected copies go to your system Trash (the Recycle Bin on Windows), where they can be restored if you change your mind, and copies on network drives, which have no Trash to restore from, get a warning first. See Moving models to the Trash for what that touches.
New to Meshory? The duplicate STL finder page shows how detection fits into cleaning up a real library.
Folder matching compares the models’ content, not their geometry, so a pack converted from STL to 3MF will not match as a folder even though the geometry tier still pairs the individual files inside it. Archive-vs-unpacked matches follow the same models-only rule: companion files the verdict never compared are listed on the card, which also spells out that keeping the archive keeps them and trashing it loses them. And an archive whose contents can't be fully listed (an encrypted or truncated listing, or another archive nested inside) is never claimed as a match at all.
Bulk actions only ever operate on the certain tiers: identical content and identical geometry. A moved, rotated or rescaled near-copy stays quarantined in the likely-duplicates queue until you confirm it, so a group you clean up really is the same model.
Network sources are covered too: files on NAS mounts are fingerprinted at a gentler pace by default. You can switch that off in Settings → Scanning, or pause the comparison pass from the Duplicates view if you need the drive left alone right now. Pausing takes effect within moments, survives an app restart, and stays on until you resume it.
The wider guide
How duplicate detection compares →