Baofeng’s CPS programming software won’t accept a configuration directly — it requires four CSV files imported in an exact sequence. Get the order wrong or forget a file and you start from scratch. With multiple repeaters and talk groups, building those files by hand easily takes a full afternoon.
This tool does it in a browser, in seconds.
Validated on the Baofeng DM-32UV with CPS v1.45 on Linux/Wine. Other Baofeng CPS-compatible models (DM-1701, DM-X, RD-5R) may use the same format — the CSV structure appears common across the line — but treat it as experimental on untested models. Reports welcome.
The four-file chain
Each file references objects defined in the previous one. Channels need talk groups to exist; zones need channels. The CPS enforces this strictly — a missing reference creates a silent broken entry on the radio.
| File | Contains | Order |
|---|---|---|
1-talkgroups.csv |
Talk group names and DMR IDs | 1st |
2-rxgrouplist.csv |
RX group lists per repeater | 2nd |
3-channels.csv |
Every channel — DMR and analog | 3rd |
4-zones.csv |
Zone groupings for the rotary | 4th |
The N × M problem
Every DMR channel on a Baofeng is unique to a talk-group × repeater pair — there’s no channel reuse across repeaters. With 49 talk groups and 10 repeaters that’s 490 DMR channels before adding a single analog frequency. The generator computes all of them instantly.
The tool
Operating Tools → Codeplug Generator — five tabs, everything runs locally, nothing is sent to a server until you click Generate or Save.
Talk Groups — every DMR contact. Click ⭐ Master TGs to load a preset list of Finnish, Brazilian and worldwide talk groups. The Zone field is critical: use consistent names like FI-MASTER, WW-MASTER — they control automatic zone generation. Rows can be sorted by zone, ID or name, and reordered by dragging.
Repeaters — one row per repeater or hotspot. The Short prefix (e.g. P for Pasila, H for Hotspot) is prepended to every channel name — how you tell channels apart on the radio display. Home checked = separate zones per talk-group category; unchecked = one CITY-ROAM zone with only the Master talk groups (good for visiting repeaters, keep it under 32 TGs).
Analog — standard FM channels with full CTCSS/DCS dropdowns matching CPS values. Check Repeater for channels that need TX offset (sets ForbidTalk=1) — leave it unchecked for simplex.
Adv. Analog / Adv. Digital — global defaults applied to every channel of that type. One thing worth knowing: leave RX Group List as None on digital channels. A Baofeng-specific bug causes the radio to ignore other channels in the same zone if this is set to anything else.
Skip — park rows without deleting them
Any row in any tab can be marked Skip. Skipped rows are shown dimmed, excluded from the generated CSVs, but kept in the saved TOML file. Add Italian repeaters before a trip, skip them when you’re home. Un-skip next time you land in Milano.
Save, load, generate
💾 Save TOML downloads a timestamped plain-text file with everything, including skipped rows. 📂 Load TOML restores it exactly. ⬇ Generate CSVs downloads all four files — the status bar tells you the channel math and the import order.
73 de OH2DQH.