{"id":315779,"date":"2026-06-16T23:41:17","date_gmt":"2026-06-16T23:41:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/media-offload-for-bunny-net\/"},"modified":"2026-06-16T23:40:49","modified_gmt":"2026-06-16T23:40:49","slug":"indigetal-media-offload-for-bunny-net","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/indigetal-media-offload-for-bunny-net\/","author":17737937,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.0.2","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"Indigetal Media Offload for Bunny.net","header_author":"Indigetal WebCraft","header_description":"Seamlessly offload the WordPress Media Library to Bunny Storage and stream videos from Bunny Stream.","assets_banners_color":"","last_updated":"2026-06-16 23:40:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/indigetal-media-offload-for-bunny-net\/","header_author_uri":"https:\/\/indigetal.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":136,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"indigetal","date":"2026-06-16 23:40:49"}},"upgrade_notice":{"1.0.5":"<p>Stream format alignment release. No settings migration required.<\/p>","1.0.4":"<p>Developer alignment for Pro private-delivery integrations. Free behavior unchanged.<\/p>","1.0.3":"<p>Stream collection hardening. No settings migration required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3575101,"resolution":"128x128","location":"assets","locale":"","width":128,"height":127},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3575101,"resolution":"256x256","location":"assets","locale":"","width":256,"height":255}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3575101,"resolution":"1","location":"assets","locale":"","width":1200,"height":996},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3575101,"resolution":"2","location":"assets","locale":"","width":1200,"height":830},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3575101,"resolution":"3","location":"assets","locale":"","width":1200,"height":955}},"screenshots":{"1":"Settings \u2014 configure Stream and Storage credentials and Pull Zone hostnames.","2":"Media Library \u2014 offloaded attachments served from Bunny CDN URLs.","3":"About &amp; Privacy \u2014 third-party data use, delivery scope, and uninstall retention policy."}},"plugin_section":[],"plugin_tags":[3863,84,46891,2216,222],"plugin_category":[50,59],"plugin_contributors":[267412],"plugin_business_model":[],"class_list":["post-315779","plugin","type-plugin","status-publish","hentry","plugin_tags-cdn","plugin_tags-media","plugin_tags-offload","plugin_tags-storage","plugin_tags-video","plugin_category-media","plugin_category-utilities-and-tools","plugin_contributors-indigetal","plugin_committers-indigetal"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/indigetal-media-offload-for-bunny-net\/assets\/icon-128x128.png?rev=3575101","icon_2x":"https:\/\/ps.w.org\/indigetal-media-offload-for-bunny-net\/assets\/icon-256x256.png?rev=3575101","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/indigetal-media-offload-for-bunny-net\/assets\/screenshot-1.png?rev=3575101","caption":"Settings \u2014 configure Stream and Storage credentials and Pull Zone hostnames."},{"src":"https:\/\/ps.w.org\/indigetal-media-offload-for-bunny-net\/assets\/screenshot-2.png?rev=3575101","caption":"Media Library \u2014 offloaded attachments served from Bunny CDN URLs."},{"src":"https:\/\/ps.w.org\/indigetal-media-offload-for-bunny-net\/assets\/screenshot-3.png?rev=3575101","caption":"About &amp; Privacy \u2014 third-party data use, delivery scope, and uninstall retention policy."}],"raw_content":"<!--section=description-->\n<p><strong>Keep using the WordPress Media Library. Serve media from Bunny.net.<\/strong><\/p>\n\n<p>Indigetal Media Offload for Bunny.net connects your existing Media Library uploads to Bunny <strong>Storage<\/strong> (files and images) and Bunny <strong>Stream<\/strong> (video). Attachments stay WordPress attachments \u2014 with CDN URLs, optional local file cleanup, and remote delete when you remove media in WordPress.<\/p>\n\n<p><strong>Why site owners use it<\/strong><\/p>\n\n<ul>\n<li><strong>Use less server disk space<\/strong> \u2014 Optionally remove local copies after successful offload.<\/li>\n<li><strong>CDN delivery<\/strong> \u2014 Attachment URLs rewrite to your Storage and Stream Pull Zone hostnames.<\/li>\n<li><strong>Video without a separate workflow<\/strong> \u2014 Upload video through the Media Library. Stream handles encoding and playback URLs.<\/li>\n<\/ul>\n\n<p><strong>What you get<\/strong><\/p>\n\n<ul>\n<li>Bunny Storage offload for supported non-video attachments<\/li>\n<li>Bunny Stream offload for common video formats WordPress allows by default (MP4\/M4V, MKV, WebM, MOV\/QT, AVI, FLV, WMV, MPEG\/MPG\/MPE)<\/li>\n<li>Thumbnail and dimension metadata for Stream videos when encoding completes<\/li>\n<li>Remote delete for linked Storage objects and Stream videos<\/li>\n<li>Per-user Stream collections where that workflow applies<\/li>\n<\/ul>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Media \u2192 Indigetal Media Offload for Bunny.net \u2192 Settings<\/strong> and enter your Bunny.net Stream and\/or Storage credentials and Pull Zone hostnames.<\/li>\n<li>Upload through the Media Library as usual \u2014 offload and URL rewriting run on supported attachments.<\/li>\n<\/ol>\n\n<p><strong>Delivery scope (important)<\/strong><\/p>\n\n<p>This Free plugin provides <strong>public\/basic CDN URLs<\/strong>. It does not generate signed or token-authenticated URLs from PHP. If your Pull Zone requires token auth on every request, configure Bunny at the edge and\/or use a compatible Pro companion or custom integration. See <strong>About &amp; Privacy<\/strong> in plugin settings and the FAQ below.<\/p>\n\n<p>An optional <strong>Pro<\/strong> companion can add private signed delivery. Extension hooks are documented in the plugin.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin sends media and configuration-related data to <strong>Bunny.net<\/strong> only when you enable Stream and\/or Storage and use the workflows above. Bunny.net terms and privacy policy: https:\/\/bunny.net\/tos\/ \u2014 https:\/\/bunny.net\/privacy\/<\/p>\n\n<p><strong>Stream (when enabled):<\/strong> Your server requests Bunny Stream API hosts such as <code>video.bunnycdn.com<\/code>. Playback URLs may use <code>player.mediadelivery.net<\/code> and your Stream Pull Zone hostname.<\/p>\n\n<p><strong>Storage (when enabled):<\/strong> Your server requests the regional Bunny Storage API for your zone. Public file URLs use your Storage Pull Zone hostname.<\/p>\n\n<p><strong>Credentials:<\/strong> API keys and related options are stored in the WordPress database (encrypted where this plugin applies encryption) and used only to contact Bunny on your behalf.<\/p>\n\n<p><strong>Delivery scope (Free):<\/strong> This release does not generate HMAC-signed or token-authenticated CDN URLs from PHP. Access control depends on your Bunny Pull Zone, Storage, and Stream configuration.<\/p>\n\n<p><strong>Deleting content:<\/strong> Removing a WordPress attachment can remove linked Bunny objects. Uninstall retention is summarized on <strong>About &amp; Privacy<\/strong> and in the FAQ above.<\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.5 or greater<\/li>\n<li>PHP 8.0 or greater<\/li>\n<li>A Bunny.net account<\/li>\n<li><strong>Stream (optional):<\/strong> Stream API access key, library ID, Stream Pull Zone hostname<\/li>\n<li><strong>Storage (optional):<\/strong> Storage zone credentials, region, Storage Pull Zone hostname<\/li>\n<\/ul>\n\n<h4>Setup<\/h4>\n\n<ol>\n<li>Install via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or copy the plugin folder to <code>wp-content\/plugins\/indigetal-media-offload-for-bunny-net\/<\/code>.<\/li>\n<li>Activate <strong>Indigetal Media Offload for Bunny.net<\/strong>.<\/li>\n<li>Open <strong>Media \u2192 Indigetal Media Offload for Bunny.net \u2192 Settings<\/strong>, enable <strong>Stream<\/strong> and\/or <strong>Storage<\/strong> as needed, then review <strong>About &amp; Privacy<\/strong>.<\/li>\n<\/ol>\n\n<p>By default, uninstall <strong>keeps<\/strong> plugin settings, credentials, and offload metadata in WordPress so you can reinstall without losing Bunny linkage. Enable <strong>Advanced \u2192 Remove plugin-owned WordPress data on uninstall<\/strong> only when you deliberately want that WordPress-side data removed.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20bunny.net%3F\"><h3>What is Bunny.net?<\/h3><\/dt>\n<dd><p>Bunny.net provides global CDN, <strong>Stream<\/strong> (video), and <strong>Storage<\/strong> (object storage). This plugin uses those services and your Pull Zone hostnames so Media Library attachments can live on Bunny while WordPress keeps normal attachment records.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20bunny.net%20account%3F\"><h3>Do I need a Bunny.net account?<\/h3><\/dt>\n<dd><p>Yes. Create Stream libraries and Storage zones in the <a href=\"https:\/\/dash.bunny.net\/\">Bunny.net dashboard<\/a>, then enter the credentials and hostnames on <strong>Media \u2192 Indigetal Media Offload for Bunny.net \u2192 Settings<\/strong>.<\/p><\/dd>\n<dt id=\"do%20stream%20and%20storage%20use%20the%20same%20hostname%3F\"><h3>Do Stream and Storage use the same hostname?<\/h3><\/dt>\n<dd><p>No. Stream playback uses your <strong>Stream<\/strong> Pull Zone hostname. Storage files use your <strong>Storage<\/strong> Pull Zone hostname. Use separate hostnames unless you intentionally configure Bunny.net otherwise.<\/p><\/dd>\n<dt id=\"are%20urls%20signed%20or%20private%3F\"><h3>Are URLs signed or private?<\/h3><\/dt>\n<dd><p>Not from this Free plugin. URLs use your configured Pull Zone hostnames and paths. Signed or member-only delivery requires Bunny edge configuration, a compatible Pro companion, or a custom integration \u2014 see <strong>About &amp; Privacy<\/strong> in settings.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20local%20files%20after%20offload%3F\"><h3>What happens to local files after offload?<\/h3><\/dt>\n<dd><p>Optional toggles remove local files after successful Storage offload or Stream upload. When enabled, WordPress may no longer keep a disk copy while delivery continues from Bunny.net. Back up before enabling local removal.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20a%20wordpress%20attachment%3F\"><h3>What happens when I delete a WordPress attachment?<\/h3><\/dt>\n<dd><p>Deleting an attachment can delete linked Storage objects (per manifest) and the remote Stream video. Treat attachment deletion as destructive for linked Bunny objects.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20or%20uninstall%3F\"><h3>What happens when I deactivate or uninstall?<\/h3><\/dt>\n<dd><p>Deactivation clears scheduled events but keeps settings, credentials, and metadata. Uninstall keeps that data by default unless you opted in to <strong>Remove plugin-owned WordPress data on uninstall<\/strong>. Uninstall never deletes remote Bunny objects \u2014 clean those up in WordPress or the Bunny.net dashboard if needed.<\/p><\/dd>\n<dt id=\"can%20i%20edit%20images%20after%20local%20files%20are%20removed%3F\"><h3>Can I edit images after local files are removed?<\/h3><\/dt>\n<dd><p>WordPress flows that require a local original on disk may fail once local copies are deleted. Plan backups before enabling aggressive local removal.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20multisite%3F\"><h3>Does this work on multisite?<\/h3><\/dt>\n<dd><p>The plugin is intended for per-site activation. Network-enable only after testing; use separate Bunny libraries, zones, and Pull Zones per site when you need isolation.<\/p><\/dd>\n<dt id=\"where%20is%20developer%20documentation%3F\"><h3>Where is developer documentation?<\/h3><\/dt>\n<dd><p>Hook, filter, REST, and meta reference: see PHPDoc in the <a href=\"https:\/\/github.com\/indigetal\/media-offload-for-bunny\">GitHub repository<\/a>. Build from source: clone the repository and run <code>npm run package<\/code>.<\/p><\/dd>\n<dt id=\"does%20free%20support%20every%20bunny%20video%20container%3F\"><h3>Does Free support every Bunny video container?<\/h3><\/dt>\n<dd><p>Free supports formats WordPress allows on the default upload path. It does not add MIME support for <code>.vod<\/code>, <code>.ts<\/code>, <code>.amv<\/code>, or literal <code>.4mv<\/code>. Stream attachment URLs use Bunny MP4 fallback shape (<code>play_720p.mp4<\/code>); enable MP4 fallback on the Stream library before upload.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Broader Stream upload format validation for WordPress default-path uploads.<\/li>\n<li>Documentation clarifications for supported formats and MP4 fallback attachment URLs.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Document Pro-only private-delivery contract; Stream URL filter adds <code>context =&gt; primary<\/code> for MP4 attachment URLs.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Stricter Stream collection list-before-create behavior; documented add-on collection resolver API.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Stream collection validation against Bunny; paginated collection listing for libraries with 100+ collections.<\/li>\n<\/ul>\n\n<p>Older releases: see the <a href=\"https:\/\/github.com\/indigetal\/media-offload-for-bunny\">GitHub repository<\/a> commit history.<\/p>","raw_excerpt":"Serve WordPress media from Bunny.net CDN. Offload Storage files and Stream video from the Media Library.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/315779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=315779"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/indigetal"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=315779"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=315779"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=315779"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=315779"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=315779"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=315779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}