| Package | Version | Downloads | Python | Changelog |
|---|---|---|---|---|
| rehuco-core | changelog | |||
| rehuco-node | changelog | |||
| rehuco-agent | changelog | |||
| borco-core | changelog | |||
| borco-pyside | changelog |
Every package is at an early stage — published so the names are taken and the release plumbing is exercised, not because they are ready to depend on.
The desktop app, rehuco-agent, is the only program here. Either:
- Download an installer from the latest release: a
Windows
.msi, a macOS.dmgor a Linux.AppImage. They are not code-signed yet, so Windows SmartScreen and macOS Gatekeeper will ask you to confirm the first launch. - Or install from PyPI (Python 3.14+):
pip install rehuco-agent, oruv tool install rehuco-agent, then runrehuco-agent.
The .rehu format is still moving, so keep backups of anything you point it at.
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 a desktop editor for a resource's details, a browser over the folders that hold them, and a player for a tutorial's videos.
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. - Fills those fields from a dropped page. Drop a URL — ArtStation, Udemy, or a user's own scraper script — on the editor to scrape it, and review the result as an ordinary edit before saving.
- Shows its screenshots. A thumbnail strip beside the fields — double-click one to fill the window, arrow keys or the wheel to move through the set, and pick which of them the strip shows. A reference pack also shows its own images, inside its archives and loose in its folders.
- Plays a tutorial's videos. Double-click a video in a tutorial's Files panel and it plays in a dock of its own: a seek bar, a speed choice, the keyboard, and previous and next through the whole tutorial. Opening the dock loads the video you watched last, paused where you left it; it marks a video watched when it ends, and says so when a video will not show well here — AV1 on a machine with nothing to decode it, or interlaced footage. With VLC installed, a Settings choice has that same dock decode with VLC's own library instead, which plays both.
- Checks its files. Generates and verifies checksums for one resource or a whole folder, remembering when each file was last checked so a re-run skips what is still fresh.
- Converts legacy
.tccatalogs. One file or a whole folder tree at once: reads the older format, writes.rehu, and keeps backups it can roll back if the conversion goes wrong. - Works in the background. Checksums, imports and scrapes run on a task queue you can pause, reorder and cancel, with a log beside it.
- Catalogs your folders. A
.rehucofile names the folders to catalog; a scan records every.rehuunder them in a rebuildable cache, and filterable tables list the result. A column view of the folders shows each record's details and checksum state, and selecting anything previews it beside the table. - Follows the disk. A record added or edited outside the app is read into the catalog when its folder is listed or its document reloaded, with no Scan needed, and an open document says when its file changed.
- Hands images to other apps. Drag an image out of the app, or press Ctrl+C on it, and Explorer, Finder, PureRef, GIMP, Krita, Blender, a browser or a chat app takes it, the copy named after the resource it came from.
- 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.
- Rebinds its shortcuts. A Shortcuts page in Settings lists every command: search by name, description or key, press a key to record it, give a command several keys, and choose where they reach. A key another command already uses is offered to reassign.
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.
What's left of the editor is small: a page image picker (a scraping helper, not an editor feature).
What's left of the catalog is filed in the implementation plan.
Past that the design reaches further — web pages and long jobs served by the node, offline borrowing between machines, multi-user access, 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 under the audit label — it collects the issues found during a
codebase audit, one sweep at a time.
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, .rehuco and .rehudb cache, legacy .tc reading
│ ├── rehuco-agent/ # PySide6 desktop GUI — the viewer/editor and catalog browser
│ └── rehuco-node/ # the local node: a process the agent runs beside itself
├── docs/specs/ # design specs (see the document map)
└── tools/ # repo tooling (mkdocs hooks, slug checker)
rehuco-agent is the desktop GUI; rehuco-core is the library it reads and writes files with.
rehuco-node is the local node: a process the agent starts a few seconds after its window is up, as
the same user, and stops when it quits — today it keeps a heartbeat file and a log in the folder the two
share, and the agent's System Integration settings page turns it on or off and shows whether it runs.
| Extension | Purpose | Status |
|---|---|---|
.rehu |
Per-resource sidecar (JSON). Source of truth. | implemented |
.rehuco |
The folders a catalog covers, each with a label and a storage kind. | implemented |
.rehudb |
SQLite catalog cache. Derived; rebuildable. | implemented |
.rehuser |
One user's state for one resource, beside its .rehu (JSON): ratings, flags, learning paths, watch progress. |
implemented |
.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/29 | present | 1060 | 3 months | Python | Qt6 |
GitHub mirrors: tutcatalog (v3) · TutCatalogPy2

