Skip to main content

tidydisk: consolidate and organize a hoard of scattered files

ci license: AGPL-3.0-or-later python: 3.11+

Pull years of scattered files (old drives, phone backups, NAS dumps, recovery-tool output) into one organized, deduplicated library. Media lands in a Jellyfin/Plex-ready layout; an agent layer sorts whatever your rules can't, using a local model so filenames never leave your machine.

tidydisk fingerprints everything you point it at, drops exact duplicates and junk, and files what's left where it belongs. It moves and stages files, never deletes them.

Status: v0.1.0 (on PyPI: pip install tidydisk). The engine, the agent layer, content-derived organization, in-place library repair, the guided 2-pass web UI, opt-in enrichment connectors, and undo/dispose/doctor are all in. See docs/roadmap.md for what's deferred.

Quickstart

The 2-pass cleanup (the front door): Pass 1 analyzes everything read-only into one sealed proposal; Pass 2 is a single review-and-execute in a localhost web UI.

flowchart LR
    A[tidydisk pilot] -->|analyzes, read-only| B[sealed proposal.json]
    B --> C[tidydisk serve]
    C -->|review clusters, approve/reject| D{Execute}
    D -->|typed confirmation| E[library on disk]
$ tidydisk pilot                       # Pass 1: analyze everything -> proposal.json
$ tidydisk serve                       # Pass 2: review clusters -> approve -> Execute

Headless Pass 2: tidydisk pilot --execute --proposal <proposal.json> --approve-all.

Install from PyPI (zero runtime deps: stdlib only):

$ pip install tidydisk

Or the granular CLI:

$ tidydisk init                        # writes an annotated tidydisk.toml
$ tidydisk check                       # validates config + root reachability
$ tidydisk scan library                # fingerprint your library into the index
$ tidydisk scan old-drive              # fingerprint a source
$ tidydisk verdicts old-drive          # ORGANIZED / JUNK / UNIQUE / REVIEW
$ tidydisk plan organize old-drive     # uniques -> library
$ tidydisk apply ".tidydisk/plans/plan-organize-old-drive-ab12cd34.jsonl" --execute
$ tidydisk plan dedup old-drive        # duplicates + junk -> staging (same-drive, reversible)
$ tidydisk apply ".tidydisk/plans/plan-dedup-old-drive-9f00aa11.jsonl" --execute
$ tidydisk verify library
$ tidydisk plan reorganize --under Video/old-drive --exif   # repair flat dumps in place

Agent layer (local model via Ollama, or any OpenAI-compatible endpoint):

$ tidydisk agent triage old-drive     # LLM recommends dispositions for the REVIEW pile
$ tidydisk agent classify old-drive   # labels the tail your rules didn't cover
$ tidydisk agent eval                 # measures the configured chain on the golden sets

A fully-annotated example config is browsable at examples/tidydisk.toml.

One small kernel owns every filesystem mutation and there is no delete API anywhere in the codebase (AST-enforced in CI): staging is reversible, and disposal only ever happens through tidydisk dispose, gated behind a typed confirmation.

See docs/formats.md for the plan/summary JSON schemas and exit codes.

License

AGPL-3.0-or-later. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tidydisk-0.1.0.tar.gz (442.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tidydisk-0.1.0-py3-none-any.whl (309.3 kB view details)

Uploaded Python 3

File details

Details for the file tidydisk-0.1.0.tar.gz.

File metadata

  • Download URL: tidydisk-0.1.0.tar.gz
  • Upload date:
  • Size: 442.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tidydisk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 285eb1282dd7a33305ffaea752e3f5a29aa35bfbca1232b4032218d5184075ee
MD5 57da71f3d8ecd0563390dcefb44d042e
BLAKE2b-256 00765c6c99a1ca6d2a0757dab79f4f1b744778cbf6f20bac1c8e04244e651aff

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidydisk-0.1.0.tar.gz:

Publisher: release.yml on msampath/tidydisk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tidydisk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tidydisk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 309.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tidydisk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64891e961b9aa7ea3416bfd106661717c53b4068fe8435462cd7ba930b7878b7
MD5 a961dd71d0e429917cbc4afcbaa643c5
BLAKE2b-256 6fee8acef4fa16bf67f8726848cf12b4174780651c13033e924389babd30175f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tidydisk-0.1.0-py3-none-any.whl:

Publisher: release.yml on msampath/tidydisk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page