{"id":405941,"date":"2026-11-13T16:03:22","date_gmt":"2026-11-13T16:03:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/radio-42-control-center\/"},"modified":"2026-11-13T16:03:07","modified_gmt":"2026-11-13T16:03:07","slug":"radio-42-control-center","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/radio-42-control-center\/","author":22011295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.0","stable_tag":"0.2.0","tested":"6.9.11","requires":"6.6","requires_php":"8.0","requires_plugins":null,"header_name":"Radio 42 Control Center","header_author":"Thomas Lloancy","header_description":"Control room for your web radio: see what is on air, skip a track, queue sounds, upload tracks and covers, and know when a host is live. Companion of Simple Radio Forty Two and the Radio 42 Server playbook.","last_updated":"2026-11-13 16:03:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/codeberg.org\/tlloancy\/radio-42-control-center","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":66,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"tlloancy","date":"2026-11-13 16:03:07","revision":3800764}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3800764,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3800764,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3800764,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3800764,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3800764,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Radio 42 Control Center\",\"author\":\"tlloancy\",\"description\":\"The control room. Without a radio server, it asks for the API URL and token on the settings screen.\"},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=r42cc\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"radio-42-control-center\"},\"options\":{\"activate\":true},\"ifAlreadyInstalled\":\"skip\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["0.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[35593,292596,238,704,47970],"plugin_category":[50,56],"plugin_contributors":[232640],"plugin_business_model":[],"class_list":["post-405941","plugin","type-plugin","status-publish","hentry","plugin_tags-icecast","plugin_tags-liquidsoap","plugin_tags-podcast","plugin_tags-radio","plugin_tags-webradio","plugin_category-media","plugin_category-social-and-sharing","plugin_contributors-tlloancy","plugin_committers-tlloancy"],"banners":{"banner":"https:\/\/ps.w.org\/radio-42-control-center\/assets\/banner-772x250.png?rev=3800764","banner_2x":"https:\/\/ps.w.org\/radio-42-control-center\/assets\/banner-1544x500.png?rev=3800764","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/radio-42-control-center\/assets\/icon-128x128.png?rev=3800764","icon_2x":"https:\/\/ps.w.org\/radio-42-control-center\/assets\/icon-256x256.png?rev=3800764","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Radio 42 Control Center drives a radio server deployed with the <strong>Radio 42 Server<\/strong> playbook (Icecast + Liquidsoap + a small control API, all in Docker). It is the companion of the <a href=\"https:\/\/wordpress.org\/plugins\/simple-radio-forty-two\/\">Simple Radio Forty Two<\/a> player: the player is what your listeners use, the control center is what you use.<\/p>\n\n<p><strong>What you can do from the WordPress admin<\/strong><\/p>\n\n<ul>\n<li>See what is on air: title, artist, cover, number of listeners.<\/li>\n<li>Know instantly whether the playlist is running or a host is <strong>live<\/strong>.<\/li>\n<li>Skip to the next track.<\/li>\n<li>Queue a sound to play right after the current track (jingles, announcements, requests).<\/li>\n<li>Upload sounds (several at once) and an optional cover for each, browse and search the library.<\/li>\n<li><strong>Remove a sound from the playlist<\/strong> without deleting it, and put it back later. Delete it for good only when you want to.<\/li>\n<li>Get the exact settings a host needs to go live from BUTT or Mixxx (audio).<\/li>\n<\/ul>\n\n<p><strong>Recommended player: Simple Radio Forty Two<\/strong><\/p>\n\n<p>To let your visitors listen, use the free <a href=\"https:\/\/wordpress.org\/plugins\/simple-radio-forty-two\/\">Simple Radio Forty Two<\/a> plugin: add your stream URL as a station and put <code>[sr42_radio]<\/code> on a page. It shows the now-playing title and, since version 2.3, can switch between audio and video if your server has the video option on. Any Icecast-compatible player works too.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<p>The plugin never exposes your server token to the browser. Every action goes through your WordPress server, which calls the radio API. The token is stored in the database (or in <code>wp-config.php<\/code>) and is never printed in a page.<\/p>\n\n<p>A host who connects to the live port takes the air immediately, over the playlist; when they disconnect, the playlist resumes by itself.<\/p>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<p>A running Radio 42 server (see the playbook repository) and its API URL and token.<\/p>\n\n<p><strong>Docs:<\/strong> <code>docs\/USER-GUIDE.md<\/code> (English) and <code>docs\/MODE-DEMPLOI.md<\/code> (French).<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Radio 42 \u2192 Settings<\/strong>, enter the API URL (for example <code>https:\/\/radio.example.com:5000<\/code>) and the API token chosen when you installed the server.<\/li>\n<li>Click <strong>Test the saved connection<\/strong>.<\/li>\n<li>Open <strong>Radio 42 \u2192 Control room<\/strong>.<\/li>\n<\/ol>\n\n<p>Optionally, pin the connection in <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define( 'R42CC_API_URL', 'https:\/\/radio.example.com:5000' );\ndefine( 'R42CC_API_TOKEN', 'your-token' );\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20any%20icecast%20server%3F\"><h3>Does it work with any Icecast server?<\/h3><\/dt>\n<dd><p>No. It talks to the Radio 42 control API, which is installed by the Radio 42 Server playbook. Listeners can still use any Icecast-compatible player.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20control%20room%3F\"><h3>Who can use the control room?<\/h3><\/dt>\n<dd><p>Users with the <code>manage_options<\/code> capability (administrators). Change it with the <code>r42cc_capability<\/code> filter.<\/p><\/dd>\n<dt id=\"why%20are%20listeners%20delayed%20when%20a%20host%20speaks%3F\"><h3>Why are listeners delayed when a host speaks?<\/h3><\/dt>\n<dd><p>Icecast buffers the stream: expect 10 to 15 seconds between the host and the listeners.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20%22remove%20from%20playlist%22%20and%20%22delete%22%3F\"><h3>What is the difference between \"Remove from playlist\" and \"Delete\"?<\/h3><\/dt>\n<dd><p>Removing a sound keeps the file on the server in a separate folder: it is never played, and you can put it back with one click. Delete erases it for good.<\/p><\/dd>\n<dt id=\"can%20i%20remove%20a%20sound%20from%20the%20queue%3F\"><h3>Can I remove a sound from the queue?<\/h3><\/dt>\n<dd><p>Not in this version: the broadcast engine can add to the queue but not edit it. Use \"Next track\" instead.<\/p><\/dd>\n<dt id=\"which%20player%20should%20my%20visitors%20use%3F\"><h3>Which player should my visitors use?<\/h3><\/dt>\n<dd><p>Simple Radio Forty Two is the companion player (it reads the same stream and now-playing data). Any player that understands an Icecast stream also works.<\/p><\/dd>\n<dt id=\"can%20the%20api%20be%20on%20another%20machine%20than%20wordpress%3F\"><h3>Can the API be on another machine than WordPress?<\/h3><\/dt>\n<dd><p>Yes. Put it behind HTTPS (a reverse proxy) so the token does not travel in clear text.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Remove a sound from the playlist (kept on the server) and put it back; new \"Removed from the playlist\" section.<\/li>\n<li>Needs Radio 42 Server 2.1.0 or later.<\/li>\n<li>Docs: <code>docs\/USER-GUIDE.md<\/code> (English) and <code>docs\/MODE-DEMPLOI.md<\/code> (French).<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: on-air status, live indicator, skip, queue, library with upload and covers, host connection settings.<\/li>\n<\/ul>","raw_excerpt":"Control room for your web radio: see what is on air, skip a track, queue sounds, upload tracks and covers, and know when a host is live.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/405941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=405941"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tlloancy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=405941"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=405941"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=405941"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=405941"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=405941"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=405941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}