- Python 3.10 or higher
- PyInstaller:
pip install pyinstaller - Icon generation: PIL/Pillow (if generating icon)
- NSIS 3.0+
- Download and install from official website
- Installer will automatically detect NSIS in common locations
- Visual Studio Build Tools (2022 or newer)
- Required to build custom PyInstaller bootloader
- See AV False Positive Mitigation section below
# Build to dist/ScreenPrompt/ directory (faster startup)
python scripts/build.py
# Clean build
python scripts/build.py --clean
# Single file executable (slower startup, but portable)
python scripts/build.py --onefile# Build both executable and NSIS installer
python scripts/build.py --installer
# Build only NSIS installer (requires existing PyInstaller build)
python scripts/build.py --nsis-only- Directory mode:
dist/ScreenPrompt/ScreenPrompt.exe+ dependencies - One-file mode:
dist/ScreenPrompt.exe(single portable file)
dist/ScreenPrompt-{version}-Setup.exe- Professional Windows installer
- Includes uninstaller
- Creates Start Menu shortcuts
- Optional desktop shortcut
- Registers in Add/Remove Programs
Edit version.txt in the project root to change the version number:
1.0.0
The NSIS installer will automatically use this version for:
- Installer filename (
ScreenPrompt-1.0.0-Setup.exe) - Program name in installer UI
- Version info in Add/Remove Programs
- Compression: LZMA solid compression for smallest size
- Version checking: Detects existing installation
- Uninstaller: Full uninstall support
- Registry integration: Properly registered in Windows
- Shortcuts: Start Menu + optional Desktop shortcut
- Settings preservation: User config in
%APPDATA%\ScreenPromptpreserved on uninstall
If you get "NSIS not found" error:
- Download from https://nsis.sourceforge.io/Download
- Install to default location (
C:\Program Files (x86)\NSIS\) - Or add NSIS to your PATH
- Run
python scripts/build.py --nsis-onlyagain
If icon is missing:
python scripts/create_icon.pyRemove all build artifacts:
python scripts/build.py --clean# Full clean release build with installer
python scripts/build.py --clean
python scripts/build.py --installer
# Result: dist/ScreenPrompt-1.0.0-Setup.exeThe NSIS installer (ScreenPrompt-{version}-Setup.exe) is the recommended distribution format:
- Professional appearance
- Easy installation/uninstallation
- Familiar to Windows users
- Smaller download size (LZMA compression)
- No manual setup required
Some antivirus engines (notably SecureAge and Trapmine) may flag ScreenPrompt as malicious. This is a false positive caused by PyInstaller's pre-built bootloader sharing binary signatures with known malware samples.
Building PyInstaller's bootloader from source creates a unique binary signature that won't match known malware hashes.
Step 1: Install Visual Studio Build Tools
# Option A: Via winget
winget install Microsoft.VisualStudio.2022.BuildTools
# Then open Visual Studio Installer and add "Desktop development with C++" workloadOr download manually from https://visualstudio.microsoft.com/downloads/
Required components:
- MSVC C++ x64/x86 build tools
- Windows 10/11 SDK
Step 2: Build and Install Custom PyInstaller
python scripts/setup_pyinstaller.pyThis will:
- Clone PyInstaller v6.18.0 source to
tools/pyinstaller-src/ - Build the bootloader using Visual Studio
- Install the custom PyInstaller
Step 3: Verify Installation
python scripts/setup_pyinstaller.py --check
# Should show: "Status: Custom bootloader is installed"Once set up, regular builds will automatically use the custom bootloader:
python scripts/build.py --clean
python scripts/build.py --installerThe build script will display a message confirming custom PyInstaller is in use.
The build configuration includes several AV-friendly settings:
- UPX Compression Disabled - UPX-compressed executables are a common heuristic trigger
- Version Info Resource -
version_info.txtembeds proper metadata (company, description, etc.) - Unique Bootloader - Custom-built bootloader has unique binary signature
If AV engines still flag the executable:
| AV Engine | Contact |
|---|---|
| SecureAge | https://www.secureage.com/support or support@secureage.com |
| Trapmine | fp@trapmine.com |
Include in your report:
- SHA256 hash of the flagged file
- VirusTotal link
- GitHub repository URL (https://github.com/dan0dev/ScreenPrompt)
- MIT license information
- Explanation that this is an open-source screen capture tool
After building with custom bootloader:
- Run
python scripts/setup_pyinstaller.py --check- confirms custom install - Run
python scripts/build.py --check-pyinstaller- confirms build uses custom - Upload to VirusTotal and compare detection count with previous build
- Test all functionality: hotkeys, screen capture, settings