Initial commit: README, MIT license, gitignore

This commit is contained in:
warna 2026-05-25 11:02:34 +02:00
commit eaefe06b37
3 changed files with 110 additions and 0 deletions

33
.gitignore vendored Normal file
View file

@ -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/

21
LICENSE Normal file
View file

@ -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.

56
README.md Normal file
View file

@ -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)