openjutsu
영상에서 원클릭으로 인물 교체, ComfyUI·MiniMax H3 기반 오픈소스 로컬 힉스필드 겐주츠 대안, FLUX.3 Klein 재조명 지원
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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