Skip to content

Repository files navigation

rehuco

License: MIT QA Coverage Windows macOS Linux

Package Version Downloads Python
rehuco-core PyPI Downloads Python
rehuco-node PyPI Downloads Python
rehuco-agent PyPI Downloads Python
borco-core PyPI Downloads Python
borco-pyside PyPI Downloads Python

A personal, distributed catalog for tutorials, references, and creative assets. The name is the stem of the file formats it owns: .rehu, .rehuco, .rehudb, .rehusw.

What it is

rehuco manages a large, heterogeneous personal media collection spread across multiple machines — local video tutorials, online course registrations, zip archives of reference images, Daz3D plugins, 3D objects, and more. Each resource is described by a .rehu (JSON) sidecar file alongside it. The system adds a distributed node model and supports offline use, multi-user access control, and a web interface for tablet access.

Key design properties:

  • Self-describing data. .rehu files live next to the content they describe. The SQLite cache (.rehudb) is rebuildable from .rehu files; it is a cache, never the source of truth.
  • No single always-on machine. The system is a swarm of peer nodes, each capable of answering for itself, each tolerant of any other node being unreachable.
  • Offline-first. Borrowing a resource onto a laptop and watching it without any network connection is a first-class use case.

Roadmap

The build is organized into milestones, each mapping to a personal use-case and adding one new architectural spine. See the implementation plan for detail.

Milestone What it does
LocalEdit (current) Local viewing and editing of .rehu files — one machine, no network, no login.
CacheDB Scan folders, cache the scan results into a .rehudb database, and search the catalog. Brings the app close to the original tutcatalog.
WatchTutorial Watch tutorials locally, or from a browser/tablet via an embedded web server, with progress remembered.
Borrowing Borrow a copy onto a laptop, watch it offline, and reconcile progress and notes on return — two-party sync (home node ↔ laptop), the minimal reconcile topology.
Swarm The full multi-node swarm — peer discovery, pairing and trust, registry resolution, and N-way sync across many machines.
Daz3D Migrate from the daz3d-personal-database predecessor — import and browse .dpdml files, and install/uninstall Daz3D plugins/extensions.

Maintenance is tracked separately in audit-run milestones X1, X2, … — each collects the issues found during the N-th codebase audit. Acquisition tooling and richer reference-image plugins remain deferred beyond the milestones above.

Monorepo layout

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, sync primitives
│   ├── rehuco-agent/         # PySide6 desktop GUI — tray, viewer/editor, catalog/admin UI
│   └── rehuco-node/          # headless REST service (FastAPI + uvicorn)
├── docs/specs/               # design specs (see the document map)
└── tools/                    # repo tooling (mkdocs hooks, slug checker)

rehuco-agent is the PySide6 desktop GUI; it is a node client for swarm operations. rehuco-core is a shared library. rehuco-node is the headless service (FastAPI + uvicorn); it runs on capable hardware and mounts the NAS share — the QNAP TS-230 is storage, not a compute host. Getting the node to run directly on the NAS would be a nice bonus if it ever proves workable, but nothing depends on it.

File formats

Extension Purpose
.rehu Per-resource sidecar (JSON). Source of truth.
.rehuco Per-machine config: folder roots, mounts, ownership flags, plugin list.
.rehudb SQLite catalog cache. Derived; rebuildable.
.rehusw Swarm state: membership, users + salted hashes, access rules. Durable.

History

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

License

MIT

Releases

Packages

Contributors

Languages