Skip to content

GurucharanSavanth/FireDM

 
 

Repository files navigation

FireDM

Homepage: https://github.com/GurucharanSavanth/FireDM

Downloads Downloads GitHub All Releases GitHub issues GitHub closed issues

logo

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.

Project Status

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.7
  • yt-dlp 2026.3.17 with yt-dlp-ejs 0.8.0
  • external ffmpeg 8.1
  • Deno 2.7.13 for 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.

Supported Features

  • 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.

Quick Links

Installation

Windows source setup:

git clone https://github.com/GurucharanSavanth/FireDM.git
cd FireDM
powershell -ExecutionPolicy Bypass -File .\bootstrap\bootstrap.ps1

Manual 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.

Running

Source CLI:

.\.venv\Scripts\python.exe -m firedm --help
.\.venv\Scripts\python.exe firedm.py --imports-only

Source GUI:

.\.venv\Scripts\python.exe -m firedm --gui

Packaged Windows build:

.\release\FireDM\firedm.exe --help
.\release\FireDM\FireDM-GUI.exe

Testing

Maintained 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 mypy

The full legacy tree is not yet Ruff-gated. Ruff and mypy are intentionally scoped to modernized seams and tests.

Building And Packaging

Canonical Build Script

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

Python Wheel/sdist

.\.venv\Scripts\python.exe -m build --no-isolation
.\.venv\Scripts\python.exe -m twine check dist\*.whl dist\*.tar.gz

Build Output

  • Canonical artifacts: release\ directory
    • release\FireDM\firedm.exe — CLI entry point
    • release\FireDM\FireDM-GUI.exe — Tkinter GUI launcher
    • release\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)

Tkinter Packaging Notes

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.

External Tools

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.

GitHub Actions / CI

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 using scripts/release/build_windows.py --arch x64, uploads build-ID artifacts, and dry-runs GitHub release creation unless manual publish_release=true or a build-YYYYMMDD_VN tag run is used. Manual runs default to dev; tag builds force stable and 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.

Validation Status

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

Manual Release Validation

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.exe

Manual 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.

Troubleshooting

  • If ffmpeg is installed but not found or not usable, check the actual install path and run ffmpeg -version. Agent shells can have stale PATH; FireDM also checks Winget package folders where the current process has access. If Winget package folders are access-denied, add ffmpeg to PATH or copy ffmpeg.exe beside the app. ffprobe health is reported separately and can be fixed by placing ffprobe.exe beside ffmpeg.exe or on PATH.
  • If PyInstaller reports tkinter as broken, keep the manual Tcl/Tk spec override and verify packaged Tk assets exist.
  • If .venv dependency installation fails on Windows, verify Python 3.10.11 and the official pycurl wheel path before attempting source builds.
  • If release\FireDM or dist\FireDM cannot be removed during rebuild, close stale packaged FireDM processes.

Known Limitations

  • controller.py, video.py, and tkview.py are 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.

Contributing

Open issues at https://github.com/GurucharanSavanth/FireDM/issues/new.

Developer references:

Credits / Maintainers

Original author: Mahmoud Elshahat ( 2019-2022 original FireDM );

Gurucharan Savanth ( 2026 fork/revival modernization ) Email: savanthgc@gmail.com

About

python open source (Internet Download Manager) with multi-connections, high speed engine, based on python, LibCurl, and youtube_dl https://github.com/GurucharanSavanth/FireDM/tree/main

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 94.7%
  • PowerShell 4.7%
  • Shell 0.6%