Drag to spin
On-device AI file organization

Find the moment.
Keep the files.

Point FileID at a folder. It tags, groups people, finds the best take, proposes real names and a tidier layout — on this machine, with models you install yourself. Nothing leaves it.

The window

Three areas. One folder. Every job in view.

Browse, Analyze and Act sit in the title bar. The sidebar lists the pages of the current area and where the library is in the pipeline. Running work, search and chat are one keystroke away.

Gold: scanning, exporting, moving · Lavender: a model is running · Pink: done · Grey: paused. The background glows lavender while a model works.
Browse · Analyze · Act

Nine pages, grouped by what you're doing.

Each page is a reviewable, undoable step. Nothing is renamed, moved or trashed until you say so, and every automatic result says where it came from.

Browse⌘1–3

Library

One searchable library: filenames, captions, tags, people and text in photos. Filter by kind, pick a file, see what FileID knows about it.

FTS5 · CLIP · RAM++ · OCR

People

Faces grouped on-device. Confirm the uncertain ones, name a person once, and every caption and file name uses that name from then on.

YuNet · SFace

Search & Moments

Search inside videos. Chapters, sampled frames and speech become seekable evidence; drafts stay drafts until you accept them.

Chapters · Speech · Evidence
Analyze⌘4–6

Deep Analyze

A local vision-language model writes a caption and proposes a short, specific file name for photos, PDFs and video keyframes. You accept or keep.

Qwen3-VL · Gemma 3 · 265 MLX models

Chat

Ask about your files. Answers cite the frame, chapter or document they came from, and keyword search works without a model.

Cited · Local

Best Takes

Group related attempts, state the goal, and let timestamped evidence pick the take that meets it — or say honestly that it's a tie.

Goal-conditioned
Act⌘7–9

Cleanup

Exact and look-alike duplicate groups. Keep one per group; the rest go to the Trash and stay recoverable.

SHA-256 · dHash

Restructure

Preview a folder layout by kind, date or both. Try it with shortcuts first, then move for real, then undo if you change your mind.

Preview · Shortcuts · Move

File Tools

Convert photos, export social-frame and stabilized video, write chapter files. Originals are never changed; every export is reopened and checked.

H.264 · 9:16 · Undo
Five front-ends

One library. Pick your window.

Three native desktop apps and two terminal clients read and write the same SQLite library. No web technology in any of them.

macOSreference

SwiftUI app and Swift engine on Apple Silicon: MLX for vision-language models, the Neural Engine for faces and search. Writes real Finder tags.

SwiftUIMLXCoreML
Windowsx64 · ARM64

WinUI 3 app over the shared Rust engine. ONNX Runtime picks DirectML, CUDA or CPU; llama.cpp runs the same catalog models.

WinUI 3.NET 8DirectML
LinuxGTK4

GNOME-native app over the same Rust engine, with the same areas, palette and motion language. Flatpak packaging.

GTK4libadwaita
fileid CLIheadless

Scan, search, dedupe and plan restructures from a shell or a NAS. Read-only by default; destructive actions sit behind explicit flags.

Rust--json
fileid-tuiterminal

A terminal dashboard over the same library: browse, search and start a full scan without leaving the shell.

Rustratatui
One libraryportable

A library scanned on one platform opens on another. Migrations are byte-faithful across the Swift and Rust engines.

SQLite WALIPC 1.16
Privacy posture

100% on-device.
Zero telemetry.

No analytics SDKs, no crash reporters, no usage pings. The only network use is a model download you start yourself, from Hugging Face, verified against pinned hashes. CI rejects anything else.

  • Local SQLite library in your application-support folder. Delete it any time; your files are untouched.
  • Models download directly from their upstream repositories. FileID never redistributes weights, and every default weight is Apache-2.0 or MIT.
  • Reviewed egress baseline. A release gate diffs every network-capable source file against reviewed digests.
  • Binary privacy scan. Every shipped binary is checked against a deny-list of telemetry SDK strings before release.
CI privacy gatePASSING
Telemetry0strings allowed
Deny-list23SDK substrings
Egress hosts1huggingface.co
$ check_binary_privacy FileIDEngine
✓ 0 telemetry strings
$ check_runtime_egress --known-blockers
✓ reviewed network-capable sources unchanged
✓ release egress gate passed
Releases

Get FileID.

Builds are published on the releases page. Early builds are clearly labeled and not yet public-trust signed; building from source is one command on every platform.

macOS

15+ · Apple Silicon

The reference app. Drag to Applications. Every page ships end-to-end, including the bundled catalog of 265 MLX models.

Releases.pkg · .dmg

Windows

10 22H2+ · 11

MSI installer under Program Files. WinUI 3 app and Rust engine; x64 and ARM64 (Snapdragon X) builds.

Releases.msi · Store MSIX

Linux

GTK4 · x86_64 · aarch64

GTK4 + libadwaita app over the shared engine, plus the fileid CLI and fileid-tui. Flatpak or build from source.

Or build from source:

./build.sh -mac       # macOS: build + launch
./build.sh -windows   # Windows: fresh-install build + run
./build.sh -linux     # Linux: GTK4 app + engine
How it's built

Two binaries. One IPC contract.

The app and the engine are separate processes talking newline-delimited JSON over stdio. A model crash never takes the window down; the engine respawns with bounded backoff.

AppFileID.app · FileID.exe · fileid-linux
  • SwiftUI · WinUI 3 · GTK4
  • Verifies the engine before spawning it
  • Auto-respawns on crash (1 s · 4 s · 16 s)
EngineFileIDEngine
  • Swift (macOS) · Rust (Windows, Linux, CLI, TUI)
  • SQLite WAL · single writer
  • Scan pipeline · on-device inference