PlutoSiege
ISM-Band RF Capture & Replay Tool for PlutoSDR
REGULATORY DISCLAIMER
RF transmission is regulated by local authorities. Replay only signals you own or are permitted to transmit, into a dummy load or at the lowest power required.
About
PlutoSiege is a terminal application (TUI) for recording and replaying short ISM-band RF bursts (e.g. 433 MHz, 868 MHz) from car remotes, garage doors, doorbells, and wireless sensors.
Built for the ADALM-Pluto (AD9363/AD9361) SDR architecture, it saves recordings in standard SigMF (Signal Metadata Format) so they can be opened in other SDR tools like URH, IQEngine, GNU Radio, or Inspectrum.
Hardware Compatibility
Fully supports both official Analog Devices ADALM-Pluto hardware (Rev. B / Rev. C) and third-party clones/analogues based on the same AD9363/AD9361 transceivers (such as Pluto Nano, Pluto Plus, and other custom PlutoSDR boards).
Features
- Level Metering: Real-time dBFS level meter with saturation (
SAT!) warning. - Threshold Detection: Automated noise floor estimation or manual threshold setting.
- Pre-Trigger Buffer: Keeps a ring buffer of history before trigger so preambles are not missed.
- SigMF Format: Saves
.sigmf-metaand.sigmf-datapairs. - GPS Geotagging: Records precise coordinates in SigMF metadata via
gpsdand displays geotags during replay. - Digital Loopback Test: Built-in test screen to check hardware loopback and SNR.
- Linux Native: Built and optimized specifically for Linux environments (supports all major distribution families: Debian-based, RPM-based, Arch-based, etc.).
Installation
1. System Drivers (libiio)
Install the required IIO system drivers for your distribution family:
Debian-based (Ubuntu, Debian, Kali, Mint, etc.):
sudo apt update && sudo apt install -y libiio0 libiio-dev libiio-utils
RPM-based (Fedora, RHEL, CentOS, Rocky, etc.):
sudo dnf install -y libiio python3-iio libiio-utils
Arch-based (Arch Linux, Manjaro, etc.):
sudo pacman -S libiio
2. Optional: GPS Support (gpsd)
If you plan to use GPS geotagging for SigMF recordings, install the gpsd daemon and tools:
Debian-based:
sudo apt install -y gpsd gpsd-clients
RPM-based:
sudo dnf install -y gpsd gpsd-clients
Arch-based:
sudo pacman -S gpsd
Note: Configure and start the
gpsdservice according to your specific GPS receiver hardware (USB dongle, UART module, Bluetooth, or virtual source) so that it listens on127.0.0.1:2947. Once running, enable GPS in PlutoSiege Settings (Enable GPS (gpsd): yes).
3. Install & Run PlutoSiege
Option A: Via pip / pipx (Recommended)
Install directly from PyPI:
pipx install pluto_siege
# or: pip install pluto_siege
Launch from any terminal:
pluto_siege
Option B: From Source (Clone Repository)
Clone the repository and install dependencies:
git clone https://github.com/SketchTurnerDev/pluto_siege.git
cd pluto_siege
pip install -r requirements.txt
Launch via the main script:
python pluto_siege.py
# or: python -m pluto_siege
Demo
Application Menu
The main menu provides access to all core operations:
1. Capture
Listens for incoming RF bursts on the configured receiver frequency (rx_freq).
- Real-time dBFS level meter with saturation (
SAT!) warnings. - Automated noise floor estimation or manual threshold detection.
- Pre-trigger history ring buffer to preserve signal preambles.
- Saves captures as standard SigMF (
.sigmf-metaand.sigmf-data) pairs with optional GPS geolocation tags.
2. Transmit
Browse and replay saved SigMF recordings.
- Displays recorded timestamp, center frequency, sample rate, sample count, and GPS coordinates.
- Replays signals via the PlutoSDR transmitter on the configured frequency (
tx_freq). - In-place deletion of unwanted recordings (
DorDelete).
3. Loopback Test
Internal hardware diagnostic to verify the SDR transceiver and USB/DMA pipeline.
- Transmits an internal digital test tone through the AD936x loopback path.
- Calculates received Signal-to-Noise Ratio (SNR) to confirm hardware health.
4. Settings
Configures radio parameters, trigger behavior, GPS integration, and interface preferences. Settings can be edited directly in the TUI and are saved to settings.json.
| Parameter | Type | Default | Description |
|---|---|---|---|
pluto_uri |
str |
usb: |
Pluto connection URI (usb: or ip:). |
pluto_ip |
str |
192.168.2.1 |
Remembered Pluto IP address when toggling between USB and IP modes. |
rx_freq |
int |
433920000 |
Receiver center frequency in Hz. |
tx_freq |
int |
433920000 |
Transmitter center frequency in Hz. |
permit_out_of_spec_frequency |
bool |
false |
Allows tuning outside 325 MHz – 3.8 GHz range (up to 70 MHz – 6.0 GHz). |
sample_rate |
int |
2100000 |
Sample rate in Hz (521 kSPS – 61.44 MSPS). |
rx_gain |
float |
15.0 |
Manual RX hardware gain in dB (0.0 to 74.5 dB). |
tx_gain |
float |
0.0 |
Manual TX attenuation gain in dB (-89.75 to 0.0 dB). |
auto_threshold |
bool |
true |
Automated noise floor calculation. |
auto_trigger_margin |
float |
8.0 |
Margin in dB above noise floor required to trigger capture (1.0 to 30.0 dB). |
manual_threshold |
float |
-30.0 |
Fixed trigger threshold in dBFS when auto is off. |
pre_trigger_buffers |
int |
2 |
Number of pre-trigger buffers kept in memory. |
silence_seconds |
float |
0.80 |
Silence required to stop recording. |
max_post_trigger_seconds |
float |
4.00 |
Maximum recording length after trigger. |
rx_buffer_size |
int |
32768 |
DMA buffer size in samples (1024 to 32768). |
enable_gps |
bool |
false |
Hardware GPS geolocation in SigMF recordings via gpsd daemon. |
gpsd_host |
str |
127.0.0.1 |
Local or remote gpsd daemon host address. |
gpsd_port |
int |
2947 |
gpsd daemon TCP port (default 2947). |
enable_sound |
bool |
true |
Acoustic cue feedback for trigger, TX, and status events. |
enable_mouse |
bool |
true |
Terminal mouse interaction support. |
License
Distributed under the GNU General Public License v3.0 (GPL-3.0). See LICENSE for details.
Metadata
Release files for pluto-siege 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pluto_siege-2.0.1.tar.gz | 63.5 kB | With provenance | Details for pluto_siege-2.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pluto_siege-2.0.1-py3-none-any.whl | Python 3 | none | any | Details for pluto_siege-2.0.1-py3-none-any.whl |
Total release size: 134.8 kB
Release files / pluto_siege-2.0.1.tar.gz
| Download URL | pluto_siege-2.0.1.tar.gz |
|---|---|
| Size | 63.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
94dd713f1a9d1c712114cd454627982da6a8a9e8b16c0d44b0f3a1b41b15aacc
|
|
BLAKE2b-256 checksum How to use checksums |
c0519160bf85b19f0fa9ecbbeff8c8f2ffbe649dc3d18acbd3cd2f2b2f98cb32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logRelease files / pluto_siege-2.0.1-py3-none-any.whl
| Download URL | pluto_siege-2.0.1-py3-none-any.whl |
|---|---|
| Size | 71.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
756c97785bfea9eb9561d2d5fc34e3fd18b7cf282ea8ba0eb6fa3e97c7fd04a8
|
|
BLAKE2b-256 checksum How to use checksums |
92378d843c63838d50173421592cf0b6937fadc5feaa25a4893ccc20c5ea4211
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logSecurity for pluto-siege 2.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pluto_siege-2.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.