A plugin that lets users running community radio stations to link their Strapi instance to a Radio Cult Account.
released August 26, 2026
npm install strapi-plugin-radiocult-uploader
Upload radio show episodes to Radio Cult and publish them onward to SoundCloud and Mixcloud — straight from the Strapi admin.
Built by Sister Midnight FM, a community radio station in South East London, for our own episode workflow — and made generic so any Radio Cult station running Strapi can use it.
.mp3/.m4a, up to Radio Cult's 750MB limit), watch a real progress bar, and the track lands in your Radio Cult media library — with the episode's artwork embedded in the mp3's ID3 tag (Radio Cult has no artwork API; embedded art is the only way).@strapi/design-system 2.0.0-rc line)fs.openAsBlob)npm install strapi-plugin-radiocult-uploader
# or: yarn add strapi-plugin-radiocult-uploaderThen raise the request body limit so full-size episodes can reach the plugin — Strapi's default is 200MB. In config/middlewares.ts (or .js), replace the 'strapi::body' line with:
{
name: 'strapi::body',
config: {
formidable: {
maxFileSize: 800 * 1024 * 1024, // Radio Cult accepts up to 750MB
},
},
},Rebuild the admin (npm run build) and restart Strapi.
Open Settings → Radio Cult Uploader → Configuration:
Credentials — paste your Radio Cult API key and station ID, then hit Test connection.
Prefer environment variables in production: RADIOCULT_API_KEY, RADIOCULT_STATION_ID and RADIOCULT_ENABLED always override what's stored here (the fields grey out when the env vars are set).
Field mapping — pick the content type your episodes live in. The plugin auto-matches fields by name and type; check them:
| Mapping | Field type | Used for |
|---|---|---|
| Title (required) | string/text | Track title on Radio Cult |
| Artwork image | media | Embedded in mp3s, sent to publishes |
| Broadcast date | date/datetime | Default album name, e.g. "August 2026" |
| SoundCloud link | string/text | The published URL is written here |
| Mixcloud link | string/text | The published URL is written here |
| Tags/genres relation | relation | Entries become publish tags (pick the label field too) |
| Show relation | relation | Optional — names the uploader browser tab |
Publish defaults — default artist (your station name) and default publish description.
Uploader theme — pick a preset (Paper, Midnight, Slate), a font (the system font or one of the bundled Google Fonts), tweak the six main colours, and set a station name and a logo (upload the logo in the Media Library and paste its URL). The preview updates live.
Google Fonts are fetched from fonts.googleapis.com / fonts.gstatic.com when a Google font is selected. If you have tightened strapi::security's CSP, add those hosts to style-src and font-src, or stay on System default.
Check Diagnostics at the bottom — it warns if your Node version or body-size limit will block uploads, or if cron is disabled.
Any admin with access to your episode content type can use the uploader. The settings page is guarded by a dedicated permission — grant Radio Cult Uploader → Access the settings to non-super-admin roles under Settings → Roles → Plugins.
402 Internal server error for every request even on plans where SoundCloud publishing works — a fault on Radio Cult's side. If that happens: publish the track by hand in the Radio Cult dashboard (Media → the track → Actions → Upload to Mixcloud). The plugin still detects the finished publish and saves the link to your entry (it watches recently uploaded tracks for up to 7 days).*/10 * * * *) for link syncing — make sure cron is enabled in config/server.ts (cron: { enabled: true }) if you want links to land while nobody has the page open.If you previously wired Radio Cult uploads into your app with bookkeeping fields on your own content type (RadioCultTrackId, RadioCultUploadedAt, …), a migration script ships in the plugin repository:
RCU_DRY_RUN=true node scripts/migrate-from-fields.mjs # from the plugin repo, run at your app root
node scripts/migrate-from-fields.mjsIt copies the old field values into the plugin's track-records (see the script header for the env vars that change the source content type/field names). Afterwards you can delete the old fields from your schema.
| Variable | Effect |
|---|---|
RADIOCULT_API_KEY | Radio Cult API key (overrides the settings page) |
RADIOCULT_STATION_ID | Radio Cult station ID (overrides the settings page) |
RADIOCULT_ENABLED | false switches the whole integration off |
npm install
npm run build # build admin + server bundles
npm run watch:link # develop against a local Strapi app via yalc
npm run verify # pre-publish checksBugs and feature requests: GitHub issues.
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
