Initial commit
App works locally. No intention to bring this live.
This commit is contained in:
65
README.md
Normal file
65
README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# tafa
|
||||
|
||||
A local web app for quickly triaging photos from cloud storage. The idea is simple: when faced with a large set of photos, making a binary decision per image — keep or discard — is much faster than manually sorting through folders. Each photo fills the screen, you press a key, and move on. No clicking, no drag and drop, no context switching. The speed comes from keeping the decision minimal and the interface out of the way.
|
||||
|
||||
## How it works
|
||||
|
||||
1. Configure one or more rclone source paths, a date range, and a destination folder
|
||||
2. tafa lists matching photos from the cloud and downloads a small initial batch
|
||||
3. Review photos with keyboard shortcuts — the rest download in the background
|
||||
4. Accepted photos are moved to your destination folder; ignored photos are deleted
|
||||
|
||||
## Requirements
|
||||
|
||||
- [uv](https://docs.astral.sh/uv/) — Python package manager
|
||||
- [rclone](https://rclone.org/) — configured with your cloud remote
|
||||
|
||||
## Setup
|
||||
|
||||
```bash
|
||||
uv sync
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
make dev # start in foreground with live reload (development)
|
||||
make start # start in background
|
||||
make stop # stop background server
|
||||
make restart # restart background server
|
||||
make logs # tail background server log
|
||||
make kill # force-kill anything on port 8000
|
||||
make clean # remove venv, logs, PID file and local staging
|
||||
```
|
||||
|
||||
Open [http://localhost:8000](http://localhost:8000) after starting.
|
||||
|
||||
## Keyboard shortcuts
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| `→` | Accept — move photo to destination folder |
|
||||
| `←` | Ignore — delete photo from staging |
|
||||
| `↑` | Remind me — show again ~10 photos later |
|
||||
|
||||
## Configuration
|
||||
|
||||
Settings are saved to `~/.tafa/config.json` between sessions.
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| Source paths | rclone remote paths, one per line (e.g. `remote:Photos/2026`) |
|
||||
| From / To | Date range — matched against the date in the filename (`YYYY-MM-DD`) |
|
||||
| Destination | Local folder where accepted photos are moved |
|
||||
|
||||
## About
|
||||
|
||||
This is a throwaway project built with AI assistance (Claude). It does the job but wasn't written with long-term maintenance in mind. Expect rough edges.
|
||||
|
||||
The name tafa has no meaning.
|
||||
|
||||
## Notes
|
||||
|
||||
- Photos already present in the destination folder are highlighted with a green border and won't be copied again if accepted
|
||||
- Staging files are stored in `~/.tafa/staging/` and cleaned up automatically on server shutdown
|
||||
- HEIC/HEIF files are skipped as browsers on Linux cannot display them natively
|
||||
Reference in New Issue
Block a user