Thanks for your interest in contributing!
- Fork the repository
- Create a branch for your feature or fix
- Test your changes with both providers (datanodes.to and fuckingfast.co)
- Submit a pull request with a clear description of what you changed and why
The entire application lives in a single file (gen_1.py, ~1350 lines). This is intentional — no package structure, no build step. The CLI version (gen_cli.py) mirrors the same architecture for headless deployment.
Key layers:
- Extraction — Playwright-based for datanodes.to, regex-based for fuckingfast.co
- Download engine — aiohttp with Range-header resume, stall detection, proxy rotation
- GUI — tkinter with 8 Hz stat updates and color-coded log output
- Telemetry — 1 Hz snapshots with
.logand.jsonoutput
- Keep the single-file architecture. Don't split into packages.
- Any change to
gen_1.pythat affects shared logic (extraction, download engine) should also be applied togen_cli.py. - Test with at least 10+ files to verify concurrency behavior.
- Don't add dependencies without a strong reason — the current stack (aiohttp + playwright + pillow) is intentionally minimal.
Use the bug report template and include your moontech_*.log file if possible.