{"id":330141,"date":"2026-06-29T05:35:37","date_gmt":"2026-06-29T05:35:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nextcloud-media-bridge\/"},"modified":"2026-06-29T05:35:02","modified_gmt":"2026-06-29T05:35:02","slug":"strychni0x-media-bridge-for-nextcloud","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/strychni0x-media-bridge-for-nextcloud\/","author":23503895,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"strychni0x Media Bridge for Nextcloud","header_author":"Florian Willnat","header_description":"Browse photos stored in a Nextcloud from the WordPress media library and import them as media. Administrators only.","assets_banners_color":"399bc9","last_updated":"2026-06-29 05:35:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"strychni0x","date":"2026-06-29 05:35:02"}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>","0.9.0":"<p>Adds a &quot;Select whole folder&quot; action for importing an entire folder at once.<\/p>","0.8.0":"<p>Multi-select now works across pagination pages.<\/p>","0.7.0":"<p>Adds an &quot;Import from Nextcloud&quot; button on the Media Library screens.<\/p>","0.6.0":"<p>You can now select and import multiple images at once.<\/p>","0.5.2":"<p>Fixes a 500 error when generating thumbnails in WordPress and hardens importing.<\/p>","0.5.1":"<p>You can now choose the thumbnail source in the settings (default: from Nextcloud).<\/p>","0.5.0":"<p>Thumbnails now also work when your Nextcloud server has no preview generation.<\/p>","0.4.1":"<p>Fixes the Nextcloud tab not appearing in the Featured Image dialog.<\/p>","0.4.0":"<p>Adds pagination for folders with many images.<\/p>","0.3.0":"<p>The Nextcloud app password is now encrypted at rest. No action required.<\/p>","0.2.0":"<p>Adds thumbnail previews in the Nextcloud tab.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3589463,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3589463,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3589463,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3589463,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The settings screen (Settings \u2192 Nextcloud Media): Nextcloud URL, username, app password, start folder and the thumbnail source option.","2":"The \"Nextcloud\" tab in the media dialog: browse folders, see thumbnails, select images (Select page \/ Select whole folder) and import.","3":"The \"Import from Nextcloud\" button on the Media Library screen, opening the importer in its own dialog."}},"plugin_section":[],"plugin_tags":[163,84,233,178125,16712],"plugin_category":[50],"plugin_contributors":[267967],"plugin_business_model":[],"class_list":["post-330141","plugin","type-plugin","status-publish","hentry","plugin_tags-images","plugin_tags-media","plugin_tags-media-library","plugin_tags-nextcloud","plugin_tags-webdav","plugin_category-media","plugin_contributors-strychni0x","plugin_committers-strychni0x"],"banners":{"banner":"https:\/\/ps.w.org\/strychni0x-media-bridge-for-nextcloud\/assets\/banner-772x250.png?rev=3589463","banner_2x":"https:\/\/ps.w.org\/strychni0x-media-bridge-for-nextcloud\/assets\/banner-1544x500.png?rev=3589463","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/strychni0x-media-bridge-for-nextcloud\/assets\/icon-128x128.png?rev=3589463","icon_2x":"https:\/\/ps.w.org\/strychni0x-media-bridge-for-nextcloud\/assets\/icon-256x256.png?rev=3589463","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>strychni0x Media Bridge for Nextcloud adds a \"Nextcloud\" tab to the WordPress media modal\n(the \"Add Media\" dialog). From there an administrator can browse the folders of\na configured Nextcloud account, preview the file names and import images into\nthe WordPress media library with a single click.<\/p>\n\n<p>Imported images become regular WordPress attachments (a copy is downloaded from\nNextcloud), so they work with every theme, block and page builder without any\nfurther integration.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Adds a dedicated \"Nextcloud\" tab to the media modal.<\/li>\n<li>Adds an \"Import from Nextcloud\" button to the Media Library and the\n\"Add New Media File\" screen, opening the browser in its own dialog.<\/li>\n<li>Browse Nextcloud folders via WebDAV.<\/li>\n<li>Thumbnail previews with a selectable source: use the Nextcloud preview\nendpoint (default), or have WordPress generate and cache the thumbnails itself\n(useful when your Nextcloud server has preview generation disabled).<\/li>\n<li>Paginated image listing for folders with many photos.<\/li>\n<li>Import images as standard WordPress attachments \u2013 one at a time or several at\nonce via multi-select.<\/li>\n<li>Access restricted to administrators (the <code>manage_options<\/code> capability).<\/li>\n<li>Connection test on the settings screen.<\/li>\n<\/ul>\n\n<h4>Access control<\/h4>\n\n<p>Every part of the plugin \u2013 the settings screen, the REST endpoints and the\nJavaScript that renders the Nextcloud tab \u2013 requires the <code>manage_options<\/code>\ncapability. Non-administrators never receive the script and cannot call the\nREST endpoints. The required capability can be changed with the\n    ncmb_required_capability filter.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to a Nextcloud server that <strong>you<\/strong> configure on the plugin\nsettings screen. It is not a third-party hosted service operated by the plugin\nauthor; you point it at your own (or your organisation's) Nextcloud instance.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li>When an administrator opens the \"Nextcloud\" tab or clicks the connection test,\nthe plugin sends a WebDAV <code>PROPFIND<\/code> request to the configured Nextcloud URL\nto list folder contents. The request includes the configured username and\napp password as an HTTP Basic authentication header.<\/li>\n<li>When the \"Nextcloud\" tab shows images, the plugin requests a thumbnail for\neach image from the Nextcloud preview endpoint\n(<code>\/index.php\/core\/preview<\/code>, authenticated) and proxies it to the browser. If\nthat endpoint returns no preview, the plugin downloads the image via WebDAV\nonce, generates a thumbnail on the WordPress server and caches it.<\/li>\n<li>When an administrator imports an image, the plugin sends a WebDAV <code>GET<\/code>\nrequest (again authenticated) to download that single file.<\/li>\n<\/ul>\n\n<p>No data is sent anywhere other than the Nextcloud URL you configure. All\nrequests originate from your WordPress server, not from the visitor's browser.<\/p>\n\n<p>The data handling of that Nextcloud instance is governed by its own operator.\nPlease refer to the documentation and privacy policy of your Nextcloud provider:<\/p>\n\n<ul>\n<li>Nextcloud: https:\/\/nextcloud.com\/ \u2013 Privacy: https:\/\/nextcloud.com\/privacy\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>strychni0x-media-bridge-for-nextcloud<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>In Nextcloud go to Settings \u2192 Security \u2192 \"Create new app password\" and copy\nthe generated password.<\/li>\n<li>In WordPress go to Settings \u2192 Nextcloud Media and enter the Nextcloud URL,\nthe username, the app password and (optionally) a start folder. Click\n\"Check connection\" to verify.<\/li>\n<li>Open the \"Add Media\" dialog in the editor or media library; a new\n\"Nextcloud\" tab is now available.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20the%20images%20copied%20or%20referenced%3F\"><h3>Are the images copied or referenced?<\/h3><\/dt>\n<dd><p>Copied. When you import an image it is downloaded from Nextcloud and stored as a\nregular WordPress attachment. There is no live link back to Nextcloud after the\nimport.<\/p><\/dd>\n<dt id=\"the%20thumbnails%20stay%20grey%20%E2%80%93%20what%20can%20i%20do%3F\"><h3>The thumbnails stay grey \u2013 what can I do?<\/h3><\/dt>\n<dd><p>Some Nextcloud servers do not generate image previews. In that case the default\n\"from Nextcloud\" mode has nothing to show. Go to Settings \u2192 Nextcloud Media and\nswitch \"Thumbnails\" to \"generate in WordPress\"; WordPress will then download each\nimage once, build a cached thumbnail and display it.<\/p><\/dd>\n<dt id=\"who%20can%20use%20the%20nextcloud%20tab%3F\"><h3>Who can use the Nextcloud tab?<\/h3><\/dt>\n<dd><p>Only administrators (users with the <code>manage_options<\/code> capability). You can change\nthe required capability with the <code>ncmb_required_capability<\/code> filter.<\/p><\/dd>\n<dt id=\"is%20my%20nextcloud%20password%20safe%3F\"><h3>Is my Nextcloud password safe?<\/h3><\/dt>\n<dd><p>Use an app password (Settings \u2192 Security in Nextcloud), never your real login\npassword, so you can revoke it at any time. The credentials are used only on the\nserver to authenticate WebDAV requests and are never exposed to the browser.<\/p>\n\n<p>The app password is stored encrypted in the database (libsodium, or OpenSSL with\nan HMAC as a fallback). The encryption key is derived from your WordPress salts\nby default. For stronger separation you may define your own key in wp-config.php:<\/p>\n\n<pre><code>define( 'NCMB_ENCRYPTION_KEY', 'a-long-random-string' );\n<\/code><\/pre>\n\n<p>Note: if you change that constant (or your WordPress salts) later, the stored\npassword can no longer be decrypted and must be re-entered on the settings\nscreen.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Added \"Select whole folder\": selects every image in the current folder across\nall pages in one click, ready to import via \"Import selection\".<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Multi-select now persists across pages: ticked images stay selected when you\npage through a folder, and \"Import selection\" imports them all. \"Select page\"\nadds the current page; \"Clear selection\" clears everything.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Added an \"Import from Nextcloud\" button to the Media Library grid and the\n\"Add New Media File\" screen. It opens the Nextcloud browser in a standalone\ndialog, so you can import without going through a post or the block editor.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Added multi-select: tick several images and import them all at once with a\nper-image progress indicator. Imports run sequentially to avoid timeouts on\nlarge photos.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Plugin Check compliance: updated \"Tested up to\" and removed the unused\n\"Domain Path\" header.<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Fixed a fatal error (HTTP 500) when generating thumbnails in WordPress: the\nrequired wp-admin file was not loaded in the REST context.<\/li>\n<li>Raised the memory limit before processing images and wrapped image handling in\nerror handling, so importing\/generating from large photos fails with a clear\nmessage instead of a blank 500 where possible.<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Added a setting to choose the thumbnail source: \"from Nextcloud\" (default,\nuses the preview endpoint) or \"generate in WordPress\". The download\/resize\nfallback now only runs when explicitly selected.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Thumbnails now have a fallback: when the Nextcloud server provides no preview,\nthe plugin downloads the image once, creates a thumbnail in WordPress and\ncaches it (with an unguessable filename and a configurable size limit via the\n  ncmb_max_thumb_bytes filter). The cache is removed on uninstall.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Fixed: the Nextcloud tab is now registered as a top router tab (next to\n\"Media Library\") instead of a left-hand menu item, so it shows up in every\nmedia modal \u2013 including the Featured Image dialog, which has no left menu.<\/li>\n<li>Improved post-import behaviour so the imported image is selected in dialogs\nthat have no dedicated insert state (e.g. Featured Image).<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added pagination to the Nextcloud tab so folders with many images load in\npages instead of all at once. The full folder listing is cached briefly on the\nserver so paging does not trigger repeated requests to Nextcloud.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>The Nextcloud app password is now stored encrypted at rest (libsodium, with an\nOpenSSL+HMAC fallback). Existing plaintext passwords are read transparently and\nre-encrypted on the next save. Optional <code>NCMB_ENCRYPTION_KEY<\/code> constant for a\ndedicated key.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added thumbnail previews in the Nextcloud tab, proxied from the Nextcloud\npreview endpoint so credentials stay on the server. Graceful fallback when no\npreview is available.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: Nextcloud tab in the media modal, folder browsing via WebDAV,\nimage import into the media library, administrator-only access.<\/li>\n<\/ul>","raw_excerpt":"Browse images stored on a Nextcloud server directly from the WordPress media modal and import them into the media library. Administrators only.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330141","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=330141"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/strychni0x"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330141"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330141"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330141"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330141"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330141"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}