{"id":35012968,"url":"https://github.com/grplyler/spectro","last_synced_at":"2026-03-15T22:16:29.058Z","repository":{"id":309666045,"uuid":"1037088416","full_name":"grplyler/spectro","owner":"grplyler","description":"A Fun little waterfall spectral analyzer, for RTL-SDR (and more to come), Inspired by GQRX, with Cyberpunk Vibes, written in Odin and Raylib.","archived":false,"fork":false,"pushed_at":"2025-08-18T01:05:55.000Z","size":39024,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-10T14:47:36.214Z","etag":null,"topics":["dsp","odin","raylib","rtlsdr","sdr"],"latest_commit_sha":null,"homepage":"","language":"Odin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grplyler.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-13T03:50:06.000Z","updated_at":"2025-09-11T05:44:00.000Z","dependencies_parsed_at":"2025-08-13T06:42:38.679Z","dependency_job_id":null,"html_url":"https://github.com/grplyler/spectro","commit_stats":null,"previous_names":["grplyler/spectro"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/grplyler/spectro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grplyler%2Fspectro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grplyler%2Fspectro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grplyler%2Fspectro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grplyler%2Fspectro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grplyler","download_url":"https://codeload.github.com/grplyler/spectro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grplyler%2Fspectro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28072695,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dsp","odin","raylib","rtlsdr","sdr"],"created_at":"2025-12-27T05:03:40.043Z","updated_at":"2025-12-27T05:05:17.042Z","avatar_url":"https://github.com/grplyler.png","language":"Odin","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Spectro - A Fun Little SDR Spectral Analyzer\n\nA Pretty Waterfall Spectral Analyzer, for RTL-SDR (and more to come), Inspired by GQRX, with Cyberpunk Vibes, written in Odin and Raylib.\n\n![alt text](images/v2ui.png)\n\n### Why?\n1. I wanted to learn Odin and build something useful with it.\n2. I work in RF/telecom and wanted a simple, focused waterfall display that just works, nothing too fancy.\n3. I like Raylib becayse it makes things easy.\n4. I like pretty, graphical things.\n5. The SDR community could use another general-purpose waterfall open-source spectrum analuzer with some style.\n\n### Building\n- Requirements:\n  - Odin compiler `brew install odin`\n  - librtlsdr `brew install librtlsdr` on macOS or `apt install librtlsdr-dev` on Linux\n \nClone the repo and initialize submodules:\n```bash\ngit clone https://github.com/grplyler/spectro.git\ncd spectro\ngit submodule update --init --recursive\n./b # or odin build spectro -o:speed -out:build/spectro\n```\n\nBuild Script:\n```bash\nodin build spectro -o:speed -out:build/spectro\n```\n\n### Running\n`./r` or `./build/spectro` to run the application.\n\n### Key Features Implemented:\n- [x] **RTL-SDR Integration**: Continuous sample acquisition from RTL-SDR device\n- [x] **GPU Accelerated**: Efficient scrolling effect using fragment shader and ring buffers\n- [x] **Click to Tune**: Click on the waterfall to retune the SDR to the clicked frequency \n- [x] **Peak Visualization**: With variable hold time\n- [x] **FFT Processing**: In-house real-time FFT computation (probably chatgpt fueled garbage I don't really understand, but hey, its still 6x faster than KissFFT)\n- [x] ***Sick* Frequency Control**: Frequency control with digits (also inspired by GQRX)\n- [x] **Pretty Waterfall**: Scrolling spectrogram display using Raylib\n- [x] **Spectrum Line Plot**: Basic Stuff\n- [x] **Color Mapping**: Viridis colormap for dB-to-color conversion\n- [x] **Cyberpunk UI**: Yes\n\n### Upcoming Essential Features:\n- [ ] handle FFT size changes\n- [ ] handle samplerate changes\n- [ ] handle gain changes (AGC switching)\n- [ ] handle device changes\n- [ ] binary builds for macOS, Linux, Windows\n- [ ] save/load settings\n- [ ] WBFM demodulation\n- [ ] IQ Sample Recording\n- [ ] Frequency Bookmarks\n\n### Upcoming Extra Features:\n- [ ] Theme Changer\n- [ ] Colormap Changer\n- [ ] SoapySDR support (for lots more SDR Support)\n- [ ] Better IQ sample playback (Sorry by GQRXs is so unintuitive and finicky)\n- [ ] Multiple SDRs working in sync to capture wide spectrum\n- [ ] Frequency Bookmarks\n- [ ] Audio recording\n- [ ] Audio live output\n- [ ] Zoom feature for waterfall\n\n### Hardcoded Configuration:\n- **FFT Size**: 2048 samples\n- **Sample Rate**: 2.048 MSPS  \n- **History**: 1024 waterfall rows\n- **Default Frequency**: 101.1 MHz\n\n### Hacking on Spectro:\n- The codes kind of a mess, but it just wanted something quick, will clean up in the meantime. \n- Feel free to contribute!\n\n### Credits:\n- [KissFFT](https://github.com/mborgerding/kissfft) for being an implementation Benchmark for speed and testing before I wrote my own FFT code.\n- [Raylib](https://github.com/raysan5/raylib) for making graphics easy and fun.\n- Odin for being a fun (and faster) language to learn and use.\n- The SDR community for inspiring this project and providing the RTL-SDR hardware.\n- GQRX\n- The (poor) LLMs that I probably abused in the process of writing this, getting angry, then having to figure it out myself anyway.\n\n### License\n- MIT License","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrplyler%2Fspectro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrplyler%2Fspectro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrplyler%2Fspectro/lists"}