BitroidDM is a PySide6 desktop torrent search, download, file browsing, and media utility. The app is being shaped into a full Bitroid Studio-style desktop client with an internal libtorrent engine, a custom themed interface, a file manager, and a wired media player.
The original Python 3.11+ libtorrent blocker has been resolved for Windows by using the proper libtorrent-windows-dll runtime package. The internal downloader is now promoted from the dev lab into the production Downloads screen, with libtorrent-backed torrent creation, progress polling, app-specific speed reporting, file priorities, pause/resume/remove controls, persisted resume state, and a Bitroid-themed monitoring UI.
- Reorganized the app into a professional package structure under
bitroid/, with dev prototypes moved underdev/. - Reworked app paths so runtime state uses the user's OS data directories instead of hardcoded project paths.
- Improved custom window behavior, title bar dragging, resize cursors, and Windows shadow handling.
- Rebuilt the file manager around layer-by-layer directory browsing with folders and files shown together.
- Added Explorer-like path dropdown behavior, context menus, rename handling, properties UI, and responsive elided filenames.
- Wired the PySide6 media player controls, playlist behavior, light/dark player styling, repeat/shuffle/lock controls, and state persistence hooks.
- Tightened dropdown/menu spacing and themed properties dialogs.
- Added app-specific network speed reporting instead of whole-system
psutil.net_io_counters()traffic. - Built and tested a dev libtorrent engine with torrent files, magnets, progress, file progress, speed, peers, tracker events, pause/resume/remove, speed limits, file priorities, storage movement, recheck, and resume-data hooks.
- Validated the engine against an official Ubuntu 26.04 LTS torrent in the OS Downloads directory.
- Promoted the libtorrent loader and torrent engine into
bitroid/services/for app use. - Integrated the Downloads UI with the internal torrent engine, including magnet/torrent add flows, metadata preview, torrent tables, detail tabs, context menus, and selectable file priorities.
- Added persistent torrent state under the user's app data directory so torrents can reappear on reopen with saved resume data, paused/start intent, active filter, and total downloaded bytes.
- Added a resizable vertical splitter between the torrent list and details panel so users can choose whether to see more table or detail content.
- Added active-state styling for the downloader sidebar filters and compact themed dropdown/header styling for torrent tables.
- Added a piece-map style progress strip and optimized detail refreshes so expensive file/peer/tracker updates only run for the visible tab.
Windows needs these OpenSSL runtime DLLs for the Python libtorrent==2.0.11 wheel:
libcrypto-1_1-x64.dlllibssl-1_1-x64.dll
They are committed under vendor/windows/libtorrent/ and were sourced from the PyPI package libtorrent-windows-dll==0.0.3. See vendor/windows/libtorrent/SOURCE.md for hashes and source notes.
The preferred install path is still dependency-based:
.\venv\Scripts\python.exe -m pip install -r requirements.txtThe committed DLLs are included so packaged Windows builds and future CI/release scripts have a stable runtime source in the repository.
python -m venv venv
.\venv\Scripts\python.exe -m pip install -r requirements.txt
.\venv\Scripts\python.exe main.pyThe isolated downloader work lives in dev/libtorrent_lab/.
Useful checks:
.\venv\Scripts\python.exe -B dev\libtorrent_lab\probe_libtorrent.py
.\venv\Scripts\python.exe -B dev\libtorrent_lab\test_torrent_engine.py
.\venv\Scripts\python.exe -B dev\libtorrent_lab\run_ubuntu_live_test.pyThe live Ubuntu test uses the official Ubuntu 26.04 LTS torrent, saves into the OS Downloads directory, and stops once critical hooks plus real payload transfer are observed. It does not need to download the full ISO unless run with --complete.
Runtime downloader state is stored outside the repository in the user's app data folder:
- Windows:
%APPDATA%\BitroidDM\torrent_state\downloads.json - macOS:
~/Library/Application Support/BitroidDM/torrent_state/downloads.json - Linux:
$XDG_DATA_HOME/BitroidDM/torrent_state/downloads.jsonor~/.local/share/BitroidDM/torrent_state/downloads.json
The state file tracks torrent rows, resume data, active sidebar filter, paused/resume intent, and total bytes downloaded by BitroidDM's torrent client.
.\venv\Scripts\python.exe -B -m py_compile main.py bitroid\app.py bitroid\services\network.py dev\libtorrent_lab\*.py
.\venv\Scripts\pyside6-uic.exe bitroid\ui\designer\interface.ui -o $env:TEMP\bitroiddm_uic_check.py
python -m compileall bitroid main.pyQt Designer currently emits one known warning from the existing UI file:
Buddy assignment: '' is not a valid widget.
Move the torrent engine work off the UI thread more completely, add formal automated tests around persisted torrent state, and continue polishing production downloader workflows such as first/last-piece mode, tracker editing, and full settings UI controls.