▲ 1.0k r/solarpunk+2 crossposts

SignalSweep: pocket counter-surveillance scanner on a XIAO ESP32-C5

I built a little box that listens for surveillance and tracking gear and tells you what it heard by sound alone. It works face-down in a cupholder or buried in a jacket pocket. No screen, no phone required.

What it hears

  • Drones: full ASTM F3411 Remote ID over BLE, Wi-Fi beacon and Wi-Fi NAN. You get ID, altitude, speed, heading and operator location.
  • Trackers: Apple Find My, Google, Samsung, Tile. When someone floods the air with fake tags it notices and stops beeping.
  • Surveillance hardware: Flock ALPR, Axon body cams, smart glasses. Signatures live in a list you edit from the app (OUI, company ID, name, UUID, SSID). No recompile.
  • Attack gear (opt-in): BLE spam, deauth bursts, karma APs, Flipper hints, pwnagotchis.

How it talks

Each category has its own beep pattern:

  • two long beeps = camera
  • rising trill = drone
  • fast ticking = tracker

Lock onto a device and it switches to hunt mode. The beeps speed up as you close in, so you walk it down by ear.

Hardware

XIAO ESP32-C5 (~$13), dual-band U.FL antenna, passive buzzer, WS2812 bar. microSD and a DS3231 are optional. The C5 sweeps 2.4 and 5 GHz together. It also runs on the S3, 2.4 GHz only.

The ESP32 bits you might care about

  • BLE scanning plus dual-band Wi-Fi promiscuous at the same time on the C5
  • Settings survive a pulled cable, because a car or a battery bank power-cycles it constantly
  • Web flasher that works out whether it's talking to a C5 or an S3
  • pcap export off the SD card over serial, straight into Wireshark

Things that bit me

  • Continuous NimBLE scans leak heap. setMaxResults defaults to 0xFF and results only clear when a scan completes, which a continuous scan never does. Every rotating random MAC leaked: 187 KB down to 78 KB of internal heap over 17 hours on the S3. esp_get_free_heap_size() hid it completely because it counts 8 MB of PSRAM. setMaxResults(0) fixed it.
  • notify() silently drops when the mbuf pool is empty. NimBLE-Arduino 1.4 ignores the return code, so big replies over BLE just went missing with no errors on either side. Now every chunk goes through ble_gattc_notify_custom(), which waits and retries on ENOMEM.
  • The NimBLE host task stack is 4 KB. I handled commands in onWrite, and a couple of new locals boot-looped the board the moment a phone connected. Over USB it worked fine, because those same commands run on loop() there.
  • One radio, two jobs. BLE scanning and Wi-Fi promiscuous mode time-slice the same radio. With a near-100% BLE scan window, Wi-Fi captured literally zero frames.
  • The C5 promiscuous callback hands you failed frames (rx_state != 0). Unless you drop them, you get random garbage and thousands of fake transmitters.
  • Pwnagotchi beacons are gzipped. The S3 ROM has tinfl_decompress built in. The C5 ROM doesn't, so I had to vendor an inflate for it.

What it won't do

It only receives. No jamming, no deauth, no injection, no spoofing. You can also kill its own BLE advertising, so it doesn't show up on someone else's scanner. The only winning move is not to transmit.

Getting it

Firmware is GPL-3.0. Flash it from the browser, then run the app in Chrome/Edge or as an Android APK. Or skip both, since the board beeps fine on its own.

Repo: https://github.com/B0z0dcl0wn/SignalSweep

Signatures are the weak spot. If it misses gear you know about, please send a PR. Happy to answer build questions.

(Full disclosure: I plan to sell assembled units and kits later. The build-your-own path is fully open now and stays that way.)

u/No-Molasses1769 — 5 days ago
▲ 28 r/tunarr

Follow-up: the Plex → Tunarr channel builder I asked about 3 months ago is done — it's a web app now

Posted here a few months back asking if anyone wanted a CLI that built Tunarr channels from a Plex library. Enough people were into it that I kept going, and it ended up outgrowing the CLI.

It's a Docker web app now. You pick the genres and decades you care about and it shows you what it can actually build from your library — marathons, genre/decade channels, studios, directors, networks, franchises in release order — with real counts, so you're picking from actual channels instead of guessing. Check the ones you want, hit deploy.

It can update your channels. Mark one live and it re-checks your library on a schedule and patches it in place, so new episodes just show up. It never recreates the channel, so Plex DVR mapping doesn't break.

It does the channel icons too, which saved me the most tedium — real logos from TMDB where they exist, generated name-stamped badges where they don't — because Plex hides the channel name as soon as a channel has an icon set.

No LLM needed — same picks give the same lineup every time. There's an optional AI layer for finding themes the filters miss, but it's off by default.

Needs Tunarr 1.x and Plex — no Jellyfin or Emby yet, the whole thing runs on Plex metadata. MIT, no account, no cloud.

https://github.com/AlpineArchitecture/programmarr

Been running it on my own setup for a few months (4k movies, 156 channels). Let me know if it breaks for you.

reddit.com
u/No-Molasses1769 — 2 months ago

[WTS] Price Drop! Benchmade 530 Mel Pardue - Satin Plain Edge [Insane Deal]

Hello Swap! I am tired of waiting around on this one, so I'm dropping it to an absolute steal of a price to get my first official transaction flair locked in.

**[Benchmade 530 Pardue Design](https://imgur.com/a/benchmade-530-AMum6l2)\*\*

* **Price:** ~~$157~~ **$130 Shipped** (PayPal Goods & Services)

* **Condition:** Excellent / Near-Factory Quality. First owner. Never carried or cut.

* **Edge:** Pristine factory edge, razor-sharp. Never sharpened or modified.

* **Centering/Action:** Perfect blade centering. Smooth axis action and rock-solid lockup.

* **Body/Handle:** Mint condition black Grivory scales. Pocket clip looks brand new with no paint wear.

* **Box/Papers:** No box, comes safely enclosed in its original black Benchmade microfiber pouch.

Shipping via USPS Priority Mail with tracking to CONUS. First public "YOLO" or "Gimme" gets it at this price. Thanks for looking!

u/No-Molasses1769 — 5 months ago
▲ 13 r/Kometa

Anyone want a CLI that turns your Plex library (or Kometa collections) into Tunarr channels automatically?

Built a tool that auto-creates Tunarr channels from your Plex library — curious if anyone else would want this

Been using Tunarr for a while and got tired of manually building channels, so I wrote a Python CLI that does it automatically. Thinking about cleaning it up for public release — wanted to see if there's any interest first.

What it does:

You run one command, it reads your entire Plex library (titles, genres, years, episode counts), and either:

- AI path — exports a CSV of your library and a prompt you paste into Claude/Gemini/GPT-4o. The LLM curates themed channels using only titles you actually own. Stuff like "90s Action", "Slow Burn Thrillers", "One More Episode" — whatever fits your library.

You save the JSON it outputs and the tool deploys it to Tunarr.

- No-AI path — auto-generates decade and genre channels from metadata alone. No LLM needed.

- Collections path — if you're running Kometa with Letterboxd lists, Trakt, or manual collections, it turns every Plex collection into a Tunarr channel automatically. Re-run it whenever Kometa updates and it keeps the channels in sync.

Channels use Tunarr's random schedule so they loop forever with no dead air. Also has a Plex DVR sync step so new channels show up in the guide automatically.

Would anyone actually use this if I posted it? Happy to share it if there's interest.

***** UPDATE *****

This is all written with AI, so please help me out. I'd love to develop this into something more useful. Tell me what you think. https://github.com/AlpineArchitecture/programmarr

u/No-Molasses1769 — 5 months ago
▲ 23 r/tunarr

Anyone want a CLI that turns your Plex library (or Kometa collections) into Tunarr channels automatically?

Built a tool that auto-creates Tunarr channels from your Plex library — curious if anyone else would want this

Been using Tunarr for a while and got tired of manually building channels, so I wrote a Python CLI that does it automatically. Thinking about cleaning it up for public release — wanted to see if there's any interest first.

What it does:

You run one command, it reads your entire Plex library (titles, genres, years, episode counts), and either:

- AI path — exports a CSV of your library and a prompt you paste into Claude/Gemini/GPT-4o. The LLM curates themed channels using only titles you actually own. Stuff like "90s Action", "Slow Burn Thrillers", "One More Episode" — whatever fits your library.

You save the JSON it outputs and the tool deploys it to Tunarr.

- No-AI path — auto-generates decade and genre channels from metadata alone. No LLM needed.

- Collections path — if you're running Kometa with Letterboxd lists, Trakt, or manual collections, it turns every Plex collection into a Tunarr channel automatically. Re-run it whenever Kometa updates and it keeps the channels in sync.

Channels use Tunarr's random schedule so they loop forever with no dead air. Also has a Plex DVR sync step so new channels show up in the guide automatically.

Would anyone actually use this if I posted it? Happy to share it if there's interest.

***** UPDATE *****

This is all written with AI, so please help me out. I'd love to develop this into something more useful. Tell me what you think. https://github.com/AlpineArchitecture/programmarr

u/No-Molasses1769 — 5 months ago

[WTS] Benchmade 530 Mel Pardue - 154CM Satin Plain Edge

Hello Swap! Putting up a classic discontinued ultralight EDC today to get my first confirmed transaction flair.

Benchmade 530 Pardue Design

  • Price: $175 Shipped (PayPal Goods & Services)
  • Condition: Excellent / Near-Factory Quality
  • Edge: Factory edge, razor-sharp, never sharpened or stropped.
  • Ownership: First owner.
  • Centering/Action: Perfect blade centering (see photos). Action is smooth and snaps open nicely, solid lockup with the Axis lock.
  • Body/Handle: Mint condition black Grivory scales. No scratches or scuffs. Pocket clip looks brand new with no paint wear.
  • Box/Papers: No original box or paperwork, but it will ship safely enclosed in its original black Benchmade microfiber pouch.

Shipping via USPS Priority Mail with tracking to CONUS. Not looking for trades at the moment since I'm looking to build up some flair. First public "YOLO" or "Gimme" takes it! Thanks for looking.

u/No-Molasses1769 — 5 months ago