Spectrum painting for amateur radio. Encode any image as audio, transmit via radio, and watch it appear on SDR waterfall displays. No decoder needed at the other end — the image IS the spectrum.
HOW IT WORKS
Each row of your image is converted into audio using an inverse FFT. Pixel brightness maps to tone amplitude, pixel position maps to frequency. When transmitted via SSB radio, the receiver's SDR waterfall reassembles the picture automatically from the signal's spectrum.
TRANSMIT
- Select an image from Photos, Camera, or built-in test patterns
- Choose a resolution preset — QUICK (80×64) to SLOW (640×256)
- Adjust frequency range with the dual-knob slider (0–10,000 Hz)
- Image encodes automatically — TX preview shows what the receiver will see
- Tap SEND to transmit via speaker or headphone output
RECEIVE
- Live FFT spectrum display cropped to the active frequency band
- Continuous waterfall decode — images appear in real time
- Adjustable input gain for weak signals
- Save decoded images to the built-in log for sharing
FEATURES
- IFFT encoding with random phase for maximum signal energy
- SDR-style waterfall colourmap (black → blue → cyan → green → yellow → red)
- Four resolution presets with auto-calculated line timing
- Optional header tone for transmission synchronisation
- Phosphor CRT aesthetic — green or amber display themes
- Received image log with save and share
- Zero external dependencies — pure Swift and Accelerate DSP
- No internet connection, no tracking, no data collection
Part of the Phosphor suite, sister app to PhosphorSSTV and PhosphorRTTY.
TRANSMIT ON LICENSED FREQUENCIES ONLY.
SUPPORT
Need help with PhantomGram? Whether you have a question about how the app works, want to request a feature, or need to report a problem, you can reach us through the following channels:
- Ask a question — get help with using PhantomGram
- Report a bug — let us know if something isn't working
- Request a feature — suggest improvements or new functionality
We aim to respond to all support requests promptly. You can also browse existing issues to see if your question has already been answered.