Initial commit: README, MIT license, gitignore
This commit is contained in:
commit
86606f504a
3 changed files with 124 additions and 0 deletions
47
.gitignore
vendored
Normal file
47
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# 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/
|
||||||
|
# Append to existing .gitignore
|
||||||
|
|
||||||
|
# uv
|
||||||
|
uv.lock.bak
|
||||||
|
|
||||||
|
# Local config (contains DB password)
|
||||||
|
mama.toml
|
||||||
|
|
||||||
|
# Alembic local state
|
||||||
|
# (alembic/versions/ stays tracked)
|
||||||
|
|
||||||
|
# Setup temporary files
|
||||||
|
*.tar.gz
|
||||||
|
*.old
|
||||||
21
LICENSE
Normal file
21
LICENSE
Normal 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
56
README.md
Normal 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)
|
||||||
Loading…
Add table
Reference in a new issue