PIrateRF transforms your Raspberry Pi Zero W into a portable RF signal generator that spawns its own WiFi hotspot. Control everything from FM broadcasts to digital modes through your browser - hack the airwaves from anywhere! π‘β‘
279
stars
112
commits
Go
primary language
Aug 1, 2026
updated

PIrateRF transforms your Raspberry Pi Zero W into a portable RF signal generator that spawns its own WiFi hotspot. Control everything from FM broadcasts to digital modes through your browser - hack the airwaves from anywhere! π‘β‘
π¬ Click here for PIrateRF Promo Video
πΊ Click here for PIrateRF Showcase Video
β οΈ LEGAL NOTICE
PIrateRF is designed for amateur radio experimentation and education - including safe indoor testing without external antennas. Built for engineers who understand that good RF practices matter more than arbitrary administrative boundaries. Users are responsible for compliance with all local RF regulations and licensing requirements. I am not responsible for any of your stupid fuckin' decisions!
All demonstration images and testing in this documentation were performed indoors without an antenna, with a maximum range of approximately 5 meters.
All controlled through a standalone WiFi access point - connect any device and start transmitting like the RF rebel you were meant to be! Perfect for international waters operations and regions with more... flexible spectrum policies.
Skip all the build bullshit and get straight to RF chaos:
.img filesudo dd if=piraterf_2025-11-23_22-18-49.img of=/dev/sdX bs=4M status=progress (replace /dev/sdX with your SD card)https://piraterf.local and start transmitting immediately!Default Settings:
fucker, Password FUCKER, Hostname piraterf.localBefore you do ANYTHING else, get your fucking Pi Zero W connected and accessible via SSH. Follow this tutorial that actually works:
π Pi Zero W USB Connection Tutorial
This will get your Pi Zero connected via USB with SSH access so you can actually deploy PIrateRF to the little bastard.
π INTERNET SHARING REQUIRED: After USB connection is working, you MUST share internet from your computer to the Pi Zero. The setup scripts need to download packages and dependencies - no internet, no RF chaos.
Set up internet sharing on Ubuntu/Linux:
Set connection to shared: In Ubuntu Network Settings, find the USB connection (usually usb0), click on it, go to IPv4 settings, and change the method from "Link-Local Only" to "Shared to other computers"
Stop Docker services (they interfere with networking):
sudo systemctl stop docker.socket
sudo systemctl stop docker
sudo systemctl restart NetworkManager
usb0 and enp5s0 with your actual interfaces):sudo iptables -A FORWARD -i usb0 -o enp5s0 -j ACCEPT
sudo iptables -A FORWARD -i enp5s0 -o usb0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.42.0.0/24 -o enp5s0 -j MASQUERADE
ssh fucker@piraterf.local (or whatever user@host.local you set up) and run ping 8.8.8.8 - if it works, you're ready to cause some RF mayhem!Find your interfaces: Use ip link show to see usb0 (Pi connection) and your main internet interface.
# Clone the repository
git clone https://github.com/psyb0t/piraterf.git
cd piraterf
# Configure your Pi settings
nano scripts/pi_config.sh
# Set: PI_USER, PI_HOST, PI_PASS, AP_SSID, AP_PASSWORD
Example configuration (modify to match your Pi setup):
PI_USER="fucker" # Pi username
PI_HOST="piraterf.local" # Pi hostname/IP
PI_PASS="FUCKER" # Pi password
AP_SSID="π΄ββ οΈπ‘" # WiFi AP name
AP_PASSWORD="FUCKER!!!" # WiFi AP password
AP_CHANNEL="7" # WiFi channel (1-14)
AP_COUNTRY="US" # Country code
# Run the full automated setup
make pi
This command will:
https://piraterf.localConnect multiple devices to the PIrateRF access point and all access the web interface simultaneously! While only one transmission can run at a time (because GPIO doesn't fucking share), all connected devices see real-time transmission status, output logs, and can take turns controlling the RF transmissions. Perfect for fucking around with friends in a radio wave gangbang! π‘π₯
Multi-Device Features:
Connect your antenna to GPIO 4 (Physical Pin 7) on the Pi Zero W:
β οΈ WARNING: The Raspberry Pi GPIO outputs square waves with harmonics across the entire spectrum. For proper outdoor transmission, you MUST use appropriate low-pass filters to suppress spurious emissions and comply with RF regulations. Without filtering, you're broadcasting on multiple frequencies simultaneously.

Full FM broadcasting with RDS support:
Configuration Options:
Upload Process: Files automatically converted via FFmpeg to 48kHz/16-bit/mono WAV format and saved to
./files/audio/uploads/
Reception:
Applications: Underground radio broadcasting, music streaming, podcasting, community radio, pirate radio stations, rickrolling entire neighborhoods


Real-time microphone streaming with configurable modulation:
Configuration Options:
Reception:
Applications: Live commentary, emergency communications, amateur radio nets, real-time broadcasting, broadcast your burps, go live on radio while in the moshpit


Ultra-weak signal digital mode for HF DX:
Configuration Options:
Reception:
Applications: Long-range DX contacts, weak signal communication, intercontinental contacts, confusing the fuck out of contesters


Classic digital text communication:
Configuration Options:
Reception:
Applications: Digital text communication, news bulletins, teletype messaging, sending ASCII art over RTTY


Binary frequency shift keying for data transmission:
Configuration Options:
Upload Process: Files moved as-is (no conversion) to
./files/data/uploads/preserving original extension
Reception:
pw-record --target=81 --rate=48000 --channels=1 - | minimodem --rx 50 -q -c 1
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). Change the --rx parameter to match your selected baud rate. Current implementation works best with 50-100 baud rates.Applications: Digital bulletins, file transfer, packet radio, data transmission, amateur radio digital modes, sending porn like back in the dialup days


Digital pager messaging system:
Configuration Options:
Reception:
pw-record --target=81 --rate=22050 --channels=1 - | multimon-ng -t raw -a POCSAG1200 -
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). Change the multimon-ng mode based on your selected baud rate:
-a POCSAG512-a POCSAG1200-a POCSAG2400Applications: Emergency paging systems, alert notifications, pager messaging, mass notification chaos, 90s nostalgia bombing


Traditional CW transmission:
Configuration Options:
Reception:
pw-record --target=81 --rate=22050 --channels=1 - | multimon-ng -t raw -a MORSE_CW -d 60 -g 60 -
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). The -d (delay) and -g (gain) parameters should be adjusted based on your transmission rate (dits per minute). Higher rates require lower delay values, lower rates need higher delay values for proper decoding.Applications: Morse code practice, beacon transmissions, emergency communications, sending dirty messages in CW, beacon spam


Simple carrier generation for testing:
Configuration Options:
Reception:
Applications: Antenna tuning, transmitter testing, SWR measurements, dead carrier trolling, RF circuit testing


Automated frequency sweeps for RF analysis:
Configuration Options:
Reception:
Applications: Antenna analysis, filter testing, frequency response measurements, wobbulating like a maniac, antenna torture testing


Slow Scan Television image transmission:
Configuration Options:
Upload Process: Images converted via ImageMagick to RGB 320x256 format (.rgb extension) for SSTV transmission, saved to
./files/images/uploads/(spectrum paint .Y files also available if previously uploaded)
Reception:
Applications: Image transmission over radio, amateur radio SSTV, visual communication, cock pic broadcasting - look at that big ass rooster

Convert images to RF spectrum art:
Configuration Options:
Upload Process: Images converted via ImageMagick to YUV format (.Y extension) for spectrum paint AND RGB 320x256 format (.rgb extension) for SSTV, both saved to
./files/images/uploads/
Reception:
Applications: RF spectrum art, spectrum visualization, signal analysis demonstrations, drawing dick pics on waterfalls, spectrum graffiti


Raw IQ sample file replay for signal reproduction:
Configuration Options:
Upload Process: IQ files moved as-is (no conversion) to
./files/iqs/uploads/preserving the .iq extension
Reception:
Applications: Signal replay, repeater capture/replay, testing and validation, signal analysis, reproducing complex modulations, SDR capture replay, RF fingerprinting research
Stop entering the same fuckin parameters every time! PIrateRF includes a full preset management system:
Features:
Usage:
Storage:
Presets are stored as JSON files in files/presets/{modulename}/ and can be backed up, shared, or version controlled. Perfect for maintaining your favorite doorbell replay configs, FM broadcast setups, or FT8 configurations!
make run-dev # Run locally with development setup
make build # Cross-compile for Pi Zero ARM
make lint-fix # Format and lint code
make test-coverage # Run tests with coverage
make pi # Complete automated setup
make deploy # Deploy to Pi
make install # Install systemd service
make ssh # SSH into Pi
make pi-reboot # Reboot Pi
make uninstall # Remove from Pi
make pi-image # Clone and shrink Pi SD card image
piraterf/
βββ cmd/ # Application entry points
βββ internal/pkg/services/
β βββ piraterf/ # Core service implementation
β βββ http_server.go # Web server and API
β βββ websocket*.go # Real-time communication
β βββ audio_*.go # Audio processing
β βββ image_*.go # Image processing
β βββ preset_*.go # Preset management
β βββ execution_*.go # RF transmission management
βββ scripts/ # Setup and deployment scripts
βββ html/ # Web interface templates
βββ static/ # Frontend assets (CSS/JS/images)
βββ files/ # Runtime file storage
β βββ audio/ # Audio files (uploads, SFX)
β βββ images/ # Image files (uploads)
β βββ data/ # Data files for FSK
β βββ iqs/ # IQ sample files
β βββ presets/ # Per-module preset configurations
β βββ pifmrds/ # FM broadcast presets
β βββ sendiq/ # IQ transmission presets
β βββ ... # Other module presets
βββ uploads/ # Temporary upload staging
β οΈ IMPORTANT LEGAL REQUIREMENTS β οΈ
PIrateRF supports the full amateur radio spectrum. Here are common frequencies for each mode:
This project is licensed under WTFPL (Do What The Fuck You Want To Public License).
(gorpitx) Add 1 extra second of carrier to RTTY transmission
(gorpitx) Ditch minimodem in FSK and use smth else
(gorpitx) Fix word spacing in morse code
Actually prove SSTV works (tried with qsstv and various settings + various listeners and nope can't do it)
Add UI help overlays: mode info buttons explaining what each transmission mode does + per-input tooltips explaining what each configuration option changes
Fix the fuckin UI header so it's not a fkin rectangle no more that fucks up the shadow lol
π΄ββ οΈ Now get out there and start broadcasting like the RF pirate you were meant to be! π‘
Remember: With great RF power comes great responsibility. Always operate legally and don't be a dick to other operators.
Built with spite using https://github.com/psyb0t/servicepack
112 commits
Go
40.1%
JavaScript
31.0%
Shell
14.0%
HTML
8.3%
CSS
6.0%
PIrateRF transforms your Raspberry Pi Zero W into a portable RF signal generator that spawns its own WiFi hotspot. Control everything from FM broadcasts to digital modes through your browser - hack the airwaves from anywhere! π‘β‘
279
stars
112
commits
Go
primary language
Aug 1, 2026
updated

PIrateRF transforms your Raspberry Pi Zero W into a portable RF signal generator that spawns its own WiFi hotspot. Control everything from FM broadcasts to digital modes through your browser - hack the airwaves from anywhere! π‘β‘
π¬ Click here for PIrateRF Promo Video
πΊ Click here for PIrateRF Showcase Video
β οΈ LEGAL NOTICE
PIrateRF is designed for amateur radio experimentation and education - including safe indoor testing without external antennas. Built for engineers who understand that good RF practices matter more than arbitrary administrative boundaries. Users are responsible for compliance with all local RF regulations and licensing requirements. I am not responsible for any of your stupid fuckin' decisions!
All demonstration images and testing in this documentation were performed indoors without an antenna, with a maximum range of approximately 5 meters.
All controlled through a standalone WiFi access point - connect any device and start transmitting like the RF rebel you were meant to be! Perfect for international waters operations and regions with more... flexible spectrum policies.
Skip all the build bullshit and get straight to RF chaos:
.img filesudo dd if=piraterf_2025-11-23_22-18-49.img of=/dev/sdX bs=4M status=progress (replace /dev/sdX with your SD card)https://piraterf.local and start transmitting immediately!Default Settings:
fucker, Password FUCKER, Hostname piraterf.localBefore you do ANYTHING else, get your fucking Pi Zero W connected and accessible via SSH. Follow this tutorial that actually works:
π Pi Zero W USB Connection Tutorial
This will get your Pi Zero connected via USB with SSH access so you can actually deploy PIrateRF to the little bastard.
π INTERNET SHARING REQUIRED: After USB connection is working, you MUST share internet from your computer to the Pi Zero. The setup scripts need to download packages and dependencies - no internet, no RF chaos.
Set up internet sharing on Ubuntu/Linux:
Set connection to shared: In Ubuntu Network Settings, find the USB connection (usually usb0), click on it, go to IPv4 settings, and change the method from "Link-Local Only" to "Shared to other computers"
Stop Docker services (they interfere with networking):
sudo systemctl stop docker.socket
sudo systemctl stop docker
sudo systemctl restart NetworkManager
usb0 and enp5s0 with your actual interfaces):sudo iptables -A FORWARD -i usb0 -o enp5s0 -j ACCEPT
sudo iptables -A FORWARD -i enp5s0 -o usb0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.42.0.0/24 -o enp5s0 -j MASQUERADE
ssh fucker@piraterf.local (or whatever user@host.local you set up) and run ping 8.8.8.8 - if it works, you're ready to cause some RF mayhem!Find your interfaces: Use ip link show to see usb0 (Pi connection) and your main internet interface.
# Clone the repository
git clone https://github.com/psyb0t/piraterf.git
cd piraterf
# Configure your Pi settings
nano scripts/pi_config.sh
# Set: PI_USER, PI_HOST, PI_PASS, AP_SSID, AP_PASSWORD
Example configuration (modify to match your Pi setup):
PI_USER="fucker" # Pi username
PI_HOST="piraterf.local" # Pi hostname/IP
PI_PASS="FUCKER" # Pi password
AP_SSID="π΄ββ οΈπ‘" # WiFi AP name
AP_PASSWORD="FUCKER!!!" # WiFi AP password
AP_CHANNEL="7" # WiFi channel (1-14)
AP_COUNTRY="US" # Country code
# Run the full automated setup
make pi
This command will:
https://piraterf.localConnect multiple devices to the PIrateRF access point and all access the web interface simultaneously! While only one transmission can run at a time (because GPIO doesn't fucking share), all connected devices see real-time transmission status, output logs, and can take turns controlling the RF transmissions. Perfect for fucking around with friends in a radio wave gangbang! π‘π₯
Multi-Device Features:
Connect your antenna to GPIO 4 (Physical Pin 7) on the Pi Zero W:
β οΈ WARNING: The Raspberry Pi GPIO outputs square waves with harmonics across the entire spectrum. For proper outdoor transmission, you MUST use appropriate low-pass filters to suppress spurious emissions and comply with RF regulations. Without filtering, you're broadcasting on multiple frequencies simultaneously.

Full FM broadcasting with RDS support:
Configuration Options:
Upload Process: Files automatically converted via FFmpeg to 48kHz/16-bit/mono WAV format and saved to
./files/audio/uploads/
Reception:
Applications: Underground radio broadcasting, music streaming, podcasting, community radio, pirate radio stations, rickrolling entire neighborhoods


Real-time microphone streaming with configurable modulation:
Configuration Options:
Reception:
Applications: Live commentary, emergency communications, amateur radio nets, real-time broadcasting, broadcast your burps, go live on radio while in the moshpit


Ultra-weak signal digital mode for HF DX:
Configuration Options:
Reception:
Applications: Long-range DX contacts, weak signal communication, intercontinental contacts, confusing the fuck out of contesters


Classic digital text communication:
Configuration Options:
Reception:
Applications: Digital text communication, news bulletins, teletype messaging, sending ASCII art over RTTY


Binary frequency shift keying for data transmission:
Configuration Options:
Upload Process: Files moved as-is (no conversion) to
./files/data/uploads/preserving original extension
Reception:
pw-record --target=81 --rate=48000 --channels=1 - | minimodem --rx 50 -q -c 1
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). Change the --rx parameter to match your selected baud rate. Current implementation works best with 50-100 baud rates.Applications: Digital bulletins, file transfer, packet radio, data transmission, amateur radio digital modes, sending porn like back in the dialup days


Digital pager messaging system:
Configuration Options:
Reception:
pw-record --target=81 --rate=22050 --channels=1 - | multimon-ng -t raw -a POCSAG1200 -
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). Change the multimon-ng mode based on your selected baud rate:
-a POCSAG512-a POCSAG1200-a POCSAG2400Applications: Emergency paging systems, alert notifications, pager messaging, mass notification chaos, 90s nostalgia bombing


Traditional CW transmission:
Configuration Options:
Reception:
pw-record --target=81 --rate=22050 --channels=1 - | multimon-ng -t raw -a MORSE_CW -d 60 -g 60 -
Note: pw-record --target=81 captures audio from the PulseAudio monitor sink (your SDR software output). The -d (delay) and -g (gain) parameters should be adjusted based on your transmission rate (dits per minute). Higher rates require lower delay values, lower rates need higher delay values for proper decoding.Applications: Morse code practice, beacon transmissions, emergency communications, sending dirty messages in CW, beacon spam


Simple carrier generation for testing:
Configuration Options:
Reception:
Applications: Antenna tuning, transmitter testing, SWR measurements, dead carrier trolling, RF circuit testing


Automated frequency sweeps for RF analysis:
Configuration Options:
Reception:
Applications: Antenna analysis, filter testing, frequency response measurements, wobbulating like a maniac, antenna torture testing


Slow Scan Television image transmission:
Configuration Options:
Upload Process: Images converted via ImageMagick to RGB 320x256 format (.rgb extension) for SSTV transmission, saved to
./files/images/uploads/(spectrum paint .Y files also available if previously uploaded)
Reception:
Applications: Image transmission over radio, amateur radio SSTV, visual communication, cock pic broadcasting - look at that big ass rooster

Convert images to RF spectrum art:
Configuration Options:
Upload Process: Images converted via ImageMagick to YUV format (.Y extension) for spectrum paint AND RGB 320x256 format (.rgb extension) for SSTV, both saved to
./files/images/uploads/
Reception:
Applications: RF spectrum art, spectrum visualization, signal analysis demonstrations, drawing dick pics on waterfalls, spectrum graffiti


Raw IQ sample file replay for signal reproduction:
Configuration Options:
Upload Process: IQ files moved as-is (no conversion) to
./files/iqs/uploads/preserving the .iq extension
Reception:
Applications: Signal replay, repeater capture/replay, testing and validation, signal analysis, reproducing complex modulations, SDR capture replay, RF fingerprinting research
Stop entering the same fuckin parameters every time! PIrateRF includes a full preset management system:
Features:
Usage:
Storage:
Presets are stored as JSON files in files/presets/{modulename}/ and can be backed up, shared, or version controlled. Perfect for maintaining your favorite doorbell replay configs, FM broadcast setups, or FT8 configurations!
make run-dev # Run locally with development setup
make build # Cross-compile for Pi Zero ARM
make lint-fix # Format and lint code
make test-coverage # Run tests with coverage
make pi # Complete automated setup
make deploy # Deploy to Pi
make install # Install systemd service
make ssh # SSH into Pi
make pi-reboot # Reboot Pi
make uninstall # Remove from Pi
make pi-image # Clone and shrink Pi SD card image
piraterf/
βββ cmd/ # Application entry points
βββ internal/pkg/services/
β βββ piraterf/ # Core service implementation
β βββ http_server.go # Web server and API
β βββ websocket*.go # Real-time communication
β βββ audio_*.go # Audio processing
β βββ image_*.go # Image processing
β βββ preset_*.go # Preset management
β βββ execution_*.go # RF transmission management
βββ scripts/ # Setup and deployment scripts
βββ html/ # Web interface templates
βββ static/ # Frontend assets (CSS/JS/images)
βββ files/ # Runtime file storage
β βββ audio/ # Audio files (uploads, SFX)
β βββ images/ # Image files (uploads)
β βββ data/ # Data files for FSK
β βββ iqs/ # IQ sample files
β βββ presets/ # Per-module preset configurations
β βββ pifmrds/ # FM broadcast presets
β βββ sendiq/ # IQ transmission presets
β βββ ... # Other module presets
βββ uploads/ # Temporary upload staging
β οΈ IMPORTANT LEGAL REQUIREMENTS β οΈ
PIrateRF supports the full amateur radio spectrum. Here are common frequencies for each mode:
This project is licensed under WTFPL (Do What The Fuck You Want To Public License).
(gorpitx) Add 1 extra second of carrier to RTTY transmission
(gorpitx) Ditch minimodem in FSK and use smth else
(gorpitx) Fix word spacing in morse code
Actually prove SSTV works (tried with qsstv and various settings + various listeners and nope can't do it)
Add UI help overlays: mode info buttons explaining what each transmission mode does + per-input tooltips explaining what each configuration option changes
Fix the fuckin UI header so it's not a fkin rectangle no more that fucks up the shadow lol
π΄ββ οΈ Now get out there and start broadcasting like the RF pirate you were meant to be! π‘
Remember: With great RF power comes great responsibility. Always operate legally and don't be a dick to other operators.
Built with spite using https://github.com/psyb0t/servicepack
112 commits
Go
40.1%
JavaScript
31.0%
Shell
14.0%
HTML
8.3%
CSS
6.0%