From eaefe06b377428118c1586b562c3b5706c14f2ae Mon Sep 17 00:00:00 2001 From: warna Date: Mon, 25 May 2026 11:02:34 +0200 Subject: [PATCH] Initial commit: README, MIT license, gitignore --- .gitignore | 33 ++++++++++++++++++++++++++++++++ LICENSE | 21 ++++++++++++++++++++ README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70c0575 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +.venv/ +venv/ +.env +.env.local +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ +*.egg-info/ +build/ +dist/ + +# Node / Vue / Vite +node_modules/ +.vite/ +frontend/dist/ + +# Editors / OS +.vscode/ +.idea/ +*.swp +.DS_Store + +# Local data / runtime +*.db +*.sqlite +*.sqlite3 +data/ +local/ +logs/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5752767 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 warnason + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..73af0f4 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# mama + +**M**edia **A**rchive **M**eets **A**utomation — a self-hosted system for +ingesting, deduplicating, and organizing personal media (photos, videos, music, +documents) on top of ZFS. + +## ⚠️ Project Status + +**Pre-alpha. Not ready for use by anyone but the author.** + +- Database schema, CLI surface, on-disk layout, and HTTP API are unstable and + will change without migration paths. +- Most features described below are planned, not implemented. +- Documentation lags behind code. + +Do not point mama at irreplaceable data. Keep independent backups of anything +mama touches. + +## Concept + +mama indexes files placed in configured scan folders, stores file contents in a +content-addressed blob store, and exposes them through hardlinked filesystem +views consumable by specialized viewers (Immich for photos and video, Navidrome +for music, Paperless-ngx for documents). + +Identical content is stored only once. Per-file context — original path, source +device, scan timestamp, embedded metadata (EXIF, ID3, sidecar files) — is +preserved as *observations* linked to the underlying blob, so duplicates +contribute information instead of clutter. + +### Workflow + +1. `mama-scan PATH` — index files into the database (no copies, no moves) +2. `mama-apply` — materialize approved observations into the archive + (blob into CAS, hardlink into view) +3. `mama-web` — browse, merge duplicates, filter, export, delete + +## Tech Stack + +- Python 3.13, FastAPI, SQLAlchemy 2.x (async), Alembic +- PostgreSQL 16 (JSONB for embedded metadata) +- Vue 3, Vite +- ZFS (single archive dataset, snapshots, NFS export), Caddy +- ExifTool, BLAKE3, ffmpeg, Pillow +- Docker Compose for companion viewers (Immich, Navidrome, Paperless-ngx) + +## Disclaimer + +mama is provided as-is for personal use. The author assumes no responsibility +for data loss, corruption, mis-deduplication, accidental deletion, or any other +adverse outcome arising from its use. Use at your own risk and only on data you +can afford to lose. + +## License + +[MIT](LICENSE)