Skip to content

SoCloseSociety/kontentmanager

KontentManager

KontentManager

Simple, fast, local ingestion of your photo / video / audio rushes from SD cards, USB and SSD.

100% local · no network by default · zero telemetry · macOS

CI License: MIT Platform Python


Why

Coming back from a shoot, offloading cards is a fragile chore: unverified copies, duplicates, scattered files, and the fear of losing something. KontentManager does that job cleanly, without cloud and without an account: plug in a drive, browse its contents, choose what to import and to which project / disk, and let the app copy with hash verification and automatic dedup.

Built for creators juggling multiple cameras and projects who want a fast, readable and safe offload — entirely on their Mac.

Download

The latest macOS app is on the Releases page (KontentManager.dmg).

  1. Open the .dmg, drag KontentManager into Applications.
  2. First launch (ad-hoc signed, not notarized): right-click → Open.
  3. On the first card plug, allow access to removable volumes.

Required for video thumbnails, metadata reading and compression: brew install ffmpeg exiftool. Browsing and importing work without them.

Screenshots

Dashboard — every connected drive and its contents at a glance:

Dashboard

Drives H.265 compression
Drives Compression

Features

  • Automatic drive detection (DiskArbitration) — even a card already inserted at launch.
  • Browse hub per drive: a Gallery view (thumbnails generated on the fly, before import) and a Files column view (folder/subfolder navigation, Finder-style).
  • Preview before import: photos, videos (playback + seek), audio — straight from the card.
  • Targeted or bulk import: select individual files or whole folders; everything flows through a single import bar.
  • Verified atomic copy: write to .kmtmp, hash source/destination in parallel, double re-read, atomic rename. Group rollback keeps a clip and its sidecars together.
  • Hash-based deduplication (never by filename) — already-imported files are flagged.
  • Readable destination tree: Client / Project / YYYY-MM-DD / Device, internal or external disk (exFAT-compatible).
  • Per-project backup drive: register a hard drive, recognized by UUID and auto-selected when you plug it in.
  • Smart project detection (card → project mapping, scoring on camera / dates / GPS).
  • Hardware recognition: Sony, Insta360 (.insv/.insp), DJI + .SRT telemetry, GoPro, iPhone, FPV.
  • Opt-in H.265 compression (non-destructive, thermal throttling) with per-device presets.
  • Manual triage: physically reassign files from one project to another.
  • Optional cloud via rclone (Google Drive / Dropbox / MEGA), off by default: nothing leaves the machine without an explicit action.

Privacy

KontentManager is local-first by design:

  • No outbound network requests by default. The only possible flow is the opt-in cloud upload that you enable and trigger yourself.
  • No telemetry, no analytics, no third-party crash reporting.
  • No account, no authentication, no cloud dependency.
  • The local server binds strictly to 127.0.0.1 on a random port at startup.
  • Your data stays in ~/Library/Application Support/KontentManager/ and your library.

Stack

Backend Python 3.12+, FastAPI, SQLAlchemy 2 (SQLite WAL), pyobjc, xxhash, exiftool, ffmpeg, rawpy, pillow-heif
Frontend React 19 + strict TypeScript, Vite, Tailwind v4, TanStack Query, framer-motion
Desktop pywebview (native window), packaged as a .app via PyInstaller

The UI is served by the FastAPI backend and shown in a pywebview window: no Electron, a light footprint.

Getting started (development)

Requirements: macOS, Python 3.12+ (3.13 supported), Node 18+, and ffmpeg + exiftool (brew install ffmpeg exiftool).

git clone https://github.com/soclosesociety/kontentmanager.git
cd kontentmanager
./scripts/dev.sh        # venv + deps, Vite (5173), backend (8770), pywebview window

Build the app (.app + .dmg)

./scripts/build_macos.sh
# -> dist-app/KontentManager.app  and  dist-app/KontentManager.dmg

Open the .dmg, drag KontentManager into Applications. Ad-hoc signed (not notarized): on first launch, right-click → Open. See packaging/README.md for details and the auto-open-on-plug LaunchAgent.

Quality

.venv/bin/python -m pytest backend/tests -q   # tests
.venv/bin/ruff check backend                  # lint
.venv/bin/mypy backend/app                     # types (strict, 0 errors)
cd frontend && npx tsc --noEmit                # frontend types

Contributing

Contributions are welcome — see CONTRIBUTING.md and the Code of Conduct.

License

MIT © SoClose Society.

About

Local-first media ingestion for macOS — decharge vos cartes SD/USB/SSD proprement, sans cloud. 100% local.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors