Tool that renders an animated tithing video over a provided loopable background video. You can run it in CLI mode or in a simple windowed UI mode.
The output video has two animated parts:
-
Verse part:
- Text (centered):
Нехай кожен дає, як серце йому призволяє, не в смутку й не з примусу, бо Бог любить того, хто з радістю дає! - Reference below it:
2 Коринтян 9:7
- Text (centered):
-
Money part:
- Left: animated donut chart (
collected / target), percentage inside, month label above, numbers below. - Optional overhead amount (>100%) is highlighted with an extra red outer arc.
- Right: QR image +
Donate ❤below.
- Left: animated donut chart (
All animations are automatically scaled to the exact background video duration.
poetry installOr with pip:
pip install moviepy numpy Pillow pymupdfMoviePy typically uses bundled imageio-ffmpeg, so a system FFmpeg install is usually not required.
If your environment cannot use the bundled binary, install FFmpeg and make it available on PATH.
Install the build tool into the Poetry environment:
poetry run python -m pip install pyinstallerThen build both packaged launchers:
powershell -ExecutionPolicy Bypass -File .\build_exe.ps1 -CleanArtifacts:
- CLI build:
dist/TithingVideoMaker/TithingVideoMaker.exe - UI build:
dist/TithingVideoMakerUI/TithingVideoMakerUI.exe
The build keeps app-owned folders like assets/ and backgrounds/ beside the executable, while PyInstaller runtime files stay under _internal/. The executables also bundle the imageio-ffmpeg runtime, so a separate FFmpeg install is usually not required.
python main.py \
--target 50000 \
--collected 32750 \
--month 1 \
--qr "assets/qr.svg" \
--output "output/tithing_january.mp4"Short flags are also supported: -t -c -m -b -o -q -f.
--target(required): monthly target amount--collected(required): collected amount--month(required): month number in range1..12--background(optional): path to background video (backgrounds/background.mp4by default)--qr(optional): path to QR image (assets/qr.svgby default), file must exist--output(optional): output mp4 path (output/tithing_video.mp4by default)--fps(optional): output frame rate, default60--threads(optional): ffmpeg worker threads, default is a balanced automatic selection--codec(optional): ffmpeg video codec, defaultautowhich prefersh264_nvencwhen it is actually usable--preset(optional): ffmpeg encoder preset, defaultmedium--ui(optional): launch windowed form mode instead of CLI args
- Lower
--fpsto reduce CPU load from per-frame Python/Pillow rendering. - Increase encoding speed by using a faster preset, for example
--preset veryfast. - By default the app probes the active ffmpeg runtime and switches to
h264_nvencautomatically when NVIDIA NVENC is available. - GPU acceleration in this project is focused on the final encode stage. Background decode and overlay composition still pass through Python/Pillow, so CPU-side frame generation remains important.
python main.py --uiIn UI mode, enter the same values (target, collected, month, background, qr, output, fps) and click Render.
Double-click launch_ui.bat in the project root to open UI directly.
The launcher prefers poetry run and falls back to plain python if Poetry is not available.