61 lines
2.3 KiB
Markdown
61 lines
2.3 KiB
Markdown
# Curator
|
|
|
|
Curator is a desktop **movie-library manager (Filmotéka)**. You import video
|
|
files into a managed **pool**, tag them, and Curator generates a browsable
|
|
**Filmotéka** — a directory tree of hardlinks into the pool — without ever
|
|
duplicating the actual video data on disk.
|
|
|
|
Curator is a fork of the former *Tagger* project; the tagging, filtering and
|
|
hardlink-tree machinery is inherited and extended into a full library workflow.
|
|
|
|
## Concepts
|
|
|
|
- **Pool** — the managed repository of files and the **single source of truth**.
|
|
Curator owns it: it imports and removes files itself, so nothing moves behind
|
|
its back. The pool has two top-level folders:
|
|
- `Filmy` — movies, organized by tags into the generated tree.
|
|
- `Seriály` — series (and any other **copy-as-is** folder), mirrored verbatim.
|
|
- **Filmotéka (output)** — a generated tree of **hardlinks** into the pool. It is
|
|
fully disposable: delete it and nothing is lost, because it is regenerated from
|
|
the pool on demand.
|
|
- **Pool index** — all pool metadata lives in a single `.Curator.!index` JSON
|
|
file at the pool root (title, ČSFD link, tags, date per file).
|
|
|
|
## Workflow
|
|
|
|
1. Configure the **pool** and the **Filmotéka output** folder.
|
|
2. **Import a movie**: pick a video, enter its **Title** and a **ČSFD link**. The
|
|
file is copied (non-destructively) into `pool/Filmy` as `Title.ext` and
|
|
recorded in the index. If a ČSFD link is given, Curator fetches the movie from
|
|
[ČSFD.cz](https://www.csfd.cz) and assigns **Žánr / Rok / Země původu** tags
|
|
automatically (use "Načíst tagy z ČSFD" to (re)fetch later).
|
|
3. **Tag** movies (Rok, Žánr, Hodnocení, …) and filter them in the UI.
|
|
4. **Generate the Filmotéka**: movies become a `Category/Tag/film` hardlink tree
|
|
(from the `Rok` / `Žánr` / `Hodnocení` categories); copy-as-is folders such as
|
|
`Seriály` are mirrored 1:1 as hardlinks.
|
|
|
|
## Running
|
|
|
|
```bash
|
|
poetry install
|
|
poetry run python Curator.py
|
|
```
|
|
|
|
The GUI is built with **PySide6**.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
poetry run pytest # tests
|
|
poetry run ruff check # lint / format
|
|
poetry run mypy # type checking
|
|
```
|
|
|
|
## Building a standalone executable
|
|
|
|
```bash
|
|
poetry run pyinstaller Curator.spec
|
|
```
|
|
|
|
The resulting `dist/Curator` is the distribution artifact.
|