Homepage: https://github.com/GurucharanSavanth/FireDM
FireDM is a Python open-source Internet Download Manager with a Tkinter GUI, command-line mode, LibCurl/pycurl transport, yt-dlp extraction, and ffmpeg post-processing.
This repository is a Windows-first fork/revival of the original FireDM project. The revival work keeps the original user-facing download-manager behavior where practical, but modernizes dependencies, packaging, GitHub Actions, and Windows runtime discovery.
Current verified baseline:
- Windows 10/11 x64
- Python
3.10.11 - repo-local
.venv pycurl 7.45.7yt-dlp 2026.3.17withyt-dlp-ejs 0.8.0- external
ffmpeg 8.1 - Deno
2.7.13for extractor JavaScript runtime support - PyInstaller one-folder Windows package
Python 3.11 and 3.12 are not advertised as supported yet. They remain validation targets until install, tests, import smoke, and Windows packaging pass.
- Multi-connection segmented downloads through pycurl/LibCurl.
- Resume, retry, speed limit, proxy, cookies, authentication, referer, and custom user-agent options.
- Video metadata extraction through yt-dlp as the primary extractor.
- Optional legacy youtube-dl compatibility through the
[legacy]extra. - Single video, playlist selection, subtitles, thumbnails, DASH/HLS handling, and ffmpeg merge/conversion paths.
- Tkinter GUI only (no Qt); command-line mode, clipboard monitor, scheduler, checksums, themes, and completion actions.
- Plugin system with 6 blocked plugins (DRM, anti-detection, browser integration, native extractors, post-processing, protocol expansion); shipped plugins disabled by default.
Real GUI interaction, real network downloads, playlist-network behavior, and real ffmpeg post-processing still require manual validation before a release claim. Unit tests cover deterministic seams, but mocked tests are not treated as proof of those live workflows.
- Architecture: docs/architecture.md
- Frontend (Tkinter): docs/frontend.md
- Plugin system: firedm/plugins/
- Plugin policy & blocking rules: firedm/plugins/policy.py
- MCP integration: docs/MCP_INTEGRATION.md
- Legacy modernization: docs/LEGACY_MODERNIZATION.md
- Qt removal log: docs/QT_REMOVAL_LOG.md
- Dependency strategy: docs/dependency-strategy.md
- Dependency policy: docs/release/DEPENDENCY_POLICY.md
- Testing: docs/testing.md
- Windows build: docs/windows-build.md
- Build ID policy: docs/release/BUILD_ID_POLICY.md
- GitHub releases: docs/release/GITHUB_RELEASES.md
- Windows installer release: docs/release/WINDOWS_INSTALLER.md
- Windows portable package: docs/release/WINDOWS_PORTABLE.md
- Known issues: docs/known-issues.md
- Legacy refactor plan: docs/legacy-refactor-plan.md
- Windows bootstrap: bootstrap/windows-dev-setup.md
Windows source setup:
git clone https://github.com/GurucharanSavanth/FireDM.git
cd FireDM
powershell -ExecutionPolicy Bypass -File .\bootstrap\bootstrap.ps1Manual editable install:
py -3.10 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -e ".[dev,build]"Linux remains source-compatible where dependencies are available, but this revival pass validates Windows first.
Source CLI:
.\.venv\Scripts\python.exe -m firedm --help
.\.venv\Scripts\python.exe firedm.py --imports-onlySource GUI:
.\.venv\Scripts\python.exe -m firedm --guiPackaged Windows build:
.\release\FireDM\firedm.exe --help
.\release\FireDM\FireDM-GUI.exeMaintained validation commands:
.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe -m ruff check firedm\FireDM.py firedm\app_paths.py firedm\extractor_adapter.py firedm\ffmpeg_service.py firedm\tool_discovery.py firedm\setting.py firedm\update.py tests
.\.venv\Scripts\python.exe -m mypyThe full legacy tree is not yet Ruff-gated. Ruff and mypy are intentionally scoped to modernized seams and tests.
Root .\windows-build.ps1 is the canonical build entry point:
# Full Windows PyInstaller release build
powershell -NoProfile -ExecutionPolicy Bypass -File .\windows-build.ps1 -Clean -Kind OneFolder -Backend PyInstaller -Mode Release
# Dry-run (show what would happen)
powershell -NoProfile -ExecutionPolicy Bypass -File .\windows-build.ps1 -DryRun
# Dependency/toolchain preflight only
powershell -NoProfile -ExecutionPolicy Bypass -File .\windows-build.ps1 -DryRun -SkipTests.\.venv\Scripts\python.exe -m build --no-isolation
.\.venv\Scripts\python.exe -m twine check dist\*.whl dist\*.tar.gz- Canonical artifacts:
release\directoryrelease\FireDM\firedm.exe— CLI entry pointrelease\FireDM\FireDM-GUI.exe— Tkinter GUI launcherrelease\manifest.json— Plugin manifest (all 6 blocked plugins listed)release\build.log— Build transcript and plugin discovery output
- Legacy/compat:
dist\FireDM\mirror (optional) - Windows installer:
dist\installers\FireDM_Setup_<build_id>_<channel>_win_x64.exe(generated from one-folder build)
PyInstaller may print warnings about tkinter on Windows. The project includes a manual Tcl/Tk workaround in scripts/firedm-win.spec. Build-time checks are in windows-build.ps1.
A valid Windows package must include these Tkinter assets:
release\FireDM\_internal\tkinter\__init__.py
release\FireDM\_internal\_tcl_data\init.tcl
release\FireDM\_internal\_tk_data\tk.tcl
Verify with:
.\release\FireDM\firedm.exe --imports-only # Should show "tkinter: ok"Do not remove the manual spec override until PyInstaller detection works without warnings.
ffmpeg is external by default. FireDM discovers ffmpeg.exe in this order and then verifies it with ffmpeg -version:
- saved configured path
- application/current directory
- global settings directory
PATH- Winget package folders on Windows
ffprobe is checked separately for diagnostics and metadata support. FireDM first looks beside the resolved/saved ffmpeg path, then uses the same application directory, settings directory, PATH, and Winget fallback search. This patch does not make ffprobe mandatory for current download enqueue or post-processing behavior.
If ffmpeg is missing, FireDM no longer downloads stale binaries from the historical upstream repository. The GUI opens ffmpeg installation guidance instead.
Deno is also external by default for yt-dlp JavaScript-runtime support. Keep Deno on PATH or in the discoverable Windows package location.
Current workflows:
windows-smoke.yml: Windows source install, tests, scoped Ruff, package build, PyInstaller package smoke, artifact upload.draft-release.yml: tag/manual Windows x64 installer lane usingscripts/release/build_windows.py --arch x64, uploads build-ID artifacts, and dry-runs GitHub release creation unless manualpublish_release=trueor abuild-YYYYMMDD_VNtag run is used. Manual runs default todev; tag builds forcestableand require signing configuration.pypi-release.yml: PyPI package build,twine check, and trusted-publishing upload path.
CI currently targets Python 3.10 because that is the only verified runtime. Add 3.11/3.12 to CI only when the project is ready to fix and support failures found on those versions.
| Area | Status |
|---|---|
| Source help/import smoke | Verified on Python 3.10.11 |
| Unit tests | Maintained through pytest |
| Scoped lint/type checks | Maintained for modernized seams |
| Wheel/sdist build | Verified with python -m build --no-isolation |
| Windows PyInstaller build | Verified with .\windows-build.ps1 -Clean -Kind OneFolder -Backend PyInstaller -Mode Release |
| Packaged CLI import smoke | Verified with release\FireDM\firedm.exe --imports-only |
| Packaged Tk GUI launcher | Built as release\FireDM\FireDM-GUI.exe; full interaction remains manual |
| Full GUI interaction | Manual/unverified |
| Real file downloads | Manual/unverified |
| Playlist network behavior | Manual/unverified |
| Real ffmpeg post-processing | Manual/unverified |
| Python 3.11 | Unvalidated locally |
| Python 3.12 | Blocked locally by broken Store launcher |
Before publishing a Windows release, run:
.\.venv\Scripts\python.exe -m pytest -q
.\.venv\Scripts\python.exe -m build --no-isolation
.\.venv\Scripts\python.exe -m twine check dist\*.whl dist\*.tar.gz
powershell -NoProfile -ExecutionPolicy Bypass -File .\windows-build.ps1 -Clean -Kind OneFolder -Backend PyInstaller -Mode Release
.\.venv\Scripts\python.exe scripts\release\build_windows.py --arch x64 --channel dev
.\.venv\Scripts\python.exe scripts\release\validate_portable.py --archive dist\portable\<portable>.zip
.\.venv\Scripts\python.exe scripts\release\github_release.py --manifest dist\release-manifest.json
.\release\FireDM\firedm.exe --help
.\release\FireDM\firedm.exe --imports-only
.\release\FireDM\FireDM-GUI.exeManual checks still required:
- Start GUI, paste a normal direct-download URL, validate queue/progress/cancel/resume behavior.
- Download a safe small file and verify final path, checksum option, and resume behavior.
- Test one single-video URL and one playlist URL with yt-dlp metadata extraction.
- Test one ffmpeg-required DASH/HLS item and verify merge/post-processing output.
- Remove or rename ffmpeg temporarily and verify missing-tool error/reporting behavior.
- If
ffmpegis installed but not found or not usable, check the actual install path and runffmpeg -version. Agent shells can have stalePATH; FireDM also checks Winget package folders where the current process has access. If Winget package folders are access-denied, add ffmpeg toPATHor copyffmpeg.exebeside the app.ffprobehealth is reported separately and can be fixed by placingffprobe.exebesideffmpeg.exeor onPATH. - If PyInstaller reports tkinter as broken, keep the manual Tcl/Tk spec override and verify packaged Tk assets exist.
- If
.venvdependency installation fails on Windows, verify Python3.10.11and the official pycurl wheel path before attempting source builds. - If
release\FireDMordist\FireDMcannot be removed during rebuild, close stale packaged FireDM processes.
controller.py,video.py, andtkview.pyare still large stateful modules. See docs/legacy-refactor-plan.md.- GUI, live downloads, playlist network behavior, and ffmpeg post-processing need manual release validation.
- Python 3.11/3.12 support is intentionally not advertised yet.
- Packaged Windows builds are release-replace, not in-place self-updating.
- Linux AppImage scripts are historical reference, not the preferred current release path.
Open issues at https://github.com/GurucharanSavanth/FireDM/issues/new.
Developer references:
Original author: Mahmoud Elshahat ( 2019-2022 original FireDM );
Gurucharan Savanth ( 2026 fork/revival modernization ) Email: savanthgc@gmail.com