| Package | Version | Downloads | Python |
|---|---|---|---|
| rehuco-core | |||
| rehuco-node | |||
| rehuco-agent | |||
| borco-core | |||
| borco-pyside |
Every package is at an early 0.0.x — published so the names are taken and the release plumbing is
exercised, not because they are ready to depend on.
A personal media catalog for the things you collect to learn from and work with — video tutorials, online courses, archives of reference images. Today it is the part that comes first: a desktop editor for a resource's details, not for the media itself.
Those details live in a small JSON file — a .rehu — sitting in the folder next to the resource it
describes, one per resource. That's the whole storage model, and the name is its stem.
How it works is one page on the whole system as it stands: the file, the rules that keep it trustworthy, the app's panels, and what isn't built.
- Edits a resource's details. Open a
.rehufrom the file manager or from the app: title, authors, publisher, release date, URL, durations, sizes, rating, level, tags, flags, and a Markdown description. - Shows its screenshots. A thumbnail strip beside the fields — click one to fill the window, arrow keys or the wheel to move through the set, and pick which of them the strip shows.
- Converts legacy
.tccatalogs. Reads the older format, writes.rehu, and keeps backups it can roll back if the conversion goes wrong. - Doesn't damage what it doesn't understand. Unrecognized fields survive a save untouched, and a file written by a newer version of the format opens read-only rather than being rewritten.
- Keeps your workspace. Atomic saves, and each file's panel layout remembered between sessions.
Self-describing by design: because the details sit next to the content, reading a resource needs nothing but the folder it's in — no index to build first, no server, no account.
Tested on Windows, macOS, and Linux.
The editor plus a basic browser is the part worth finishing: the remaining editor work (a reference-images resource type, a log dock and task queue, tray and preferences), and then a view over a folder of resources — a rebuildable cache with search, so a collection can be looked through rather than opened one file at a time. See the implementation plan.
Past that point the design reaches further — playback with progress tracking, a headless node with a REST API, sync and offline borrowing between machines, multi-user access rules, a browser interface, Daz3D library migration. None of it is implemented, none of it is scheduled, and some of it may never be: it is what the architecture is shaped to allow, and each piece has to earn its place when its turn comes. The design specs explore that territory in depth — as intent, not as a description of the current build.
Maintenance is tracked separately in audit-run milestones X1, X2, … — each collects the
issues found during the N-th codebase audit.
rehuco/ # uv virtual-workspace root (no [project] table)
├── packages/
│ ├── borco-core/ # generic non-GUI utilities — temporary guest, moving out
│ ├── borco-pyside/ # generic PySide widgets/utilities — temporary guest, moving out
│ ├── rehuco-core/ # shared models, .rehu I/O, field types, legacy .tc reading
│ ├── rehuco-agent/ # PySide6 desktop GUI — the viewer/editor
│ └── rehuco-node/ # a reserved name; no service written yet
├── docs/specs/ # design specs (see the document map)
└── tools/ # repo tooling (mkdocs hooks, slug checker)
rehuco-agent is the desktop GUI and the only runnable program here; rehuco-core is the library it
reads and writes files with. rehuco-node holds a name and a version constant against the day a
headless service is written — nothing imports it, and nothing depends on it existing.
| Extension | Purpose | Status |
|---|---|---|
.rehu |
Per-resource sidecar (JSON). Source of truth. | implemented |
.rehuco |
Per-machine config: folder roots, mounts, ownership flags, plugin list. | reserved, not written |
.rehudb |
SQLite catalog cache. Derived; rebuildable. | reserved, not written |
.rehusw |
Swarm state: membership, users + salted hashes, access rules. Durable. | reserved, not written |
.tc, the format of the tutcatalog predecessors, is read for conversion only — rehuco
never writes it.
| Project | Host | First Commit | Last Commit | Commits | Duration | Language | Qt |
|---|---|---|---|---|---|---|---|
| ibocator | SourceForge | 2010/01/26 | 2010/07/19 | 427 | 3 months | C++ | Qt4 |
| tutcatalog | GitLab | 2016/08/09 | 2020/09/30 | 743 | 4 years | C++ | Qt5 |
| tutcatalog (v3) | GitLab | 2017/05/02 | 2017/05/29 | 81 | 1 month | C++/Python | Qt5 |
| tutcatalogpy | GitLab | 2020/08/19 | 2021/01/28 | 407 | 6 months | Python | Qt5 |
| TutCatalogPy2 | GitLab | 2021/06/01 | 2022/01/04 | 392 | 7 months | Python | Qt5 |
| daz3d-personal-database | GitLab | 2022/01/01 | 2023/11/11 | 754 | 1 year 10 months | Python | Qt6 |
| tutcatalogpy3 | GitLab | 2022/02/07 | 2022/07/28 | 205 | 6 months | Python | Qt6 |
| tutcatalog4 | GitLab | 2022/09/19 | 2024/12/22 | 519 | 2 years 3 months | C++/Python | Qt6 |
| daz3d-personal-database-2 | GitLab | 2023/05/10 | 2023/09/16 | 1053 | 4 months | Python | Qt6 |
| tutcatalog5 | GitLab | 2024/12/22 | 2025/04/15 | 408 | 4 months | Python | Qt6 |
| resource-hub | GitLab | 2026/04/27 | 2026/06 | 449 | 2 months | Python | Qt6 |
| rehuco | GitHub | 2026/06 | present | Python | Qt6 |
GitHub mirrors: tutcatalog (v3) · TutCatalogPy2