尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
bhai kese
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A self-hosted photo library. Drop in your photos and PhotoStack reads when and where they were taken, builds a timeline, groups them into albums, puts them on a map, and finds duplicates. Think a small, understandable Google Photos you run yourself.
Website · Live demo (read-only, sample photos)
Docker (simplest):
docker compose up --build
Open http://localhost:8000. Photos and the database live in the photostack_data volume.
For development (needs uv, Node 20+, and optionally ffmpeg for video thumbnails):
uv sync
npm --prefix frontend install
npm --prefix frontend run build
uv run uvicorn photostack.main:app --reload
You can also copy photos straight into uploads/; they're indexed at startup.
All optional, via environment variables or a .env file (see .env.example):
| Variable | Default | What it does |
|---|---|---|
DATABASE_URL | sqlite:///./photostack.db | Any SQLAlchemy URL; Postgres needs uv sync --extra postgres |
UPLOADS_DIR | uploads | Where photos, thumbnails and previews are stored |
GEOCODING_ENABLED | true | Look up street addresses for GPS positions |
GEMINI_API_KEY | unset | Turns on AI tagging (needs uv sync --extra ai). Sends 400px thumbnails to Google |
DEMO_MODE | false | Public demo: fully read-only, with example albums from demo-photos/albums.json |
FastAPI backend, React frontend, SQLite by default. Uploads return immediately; a background task reads EXIF, makes WebP thumbnails, fingerprints the image for duplicate detection, and then (optionally) geocodes and tags it.
See docs/ARCHITECTURE.md for the data model, the upload flow, and why each design decision was made.
photostack/ backend: routers → crud → models; indexer, integrity, storage
frontend/ React + TypeScript + Tailwind
tests/ pytest, runs offline against SQLite
uv run pytest # backend tests
uv run ruff check && uv run ruff format --check
npm --prefix frontend run typecheck
The public demo runs on Render's free tier from render.yaml
(Dashboard → New → Blueprint → this repo). It runs the Docker image with
DEMO_MODE=true: read-only, seeded with demo-photos/ on every start, no AI.
Free instances sleep when idle, so the first visit can take up to a minute.
The project website is docs/index.html, published with GitHub Pages from /docs.
MIT