IMGVerse
Search and insert Creative Commons images from Openverse directly into your WordPress posts and pages.
by Krafty Sprouts Media, LLC · github.com/krafty-sprouts-media-llc/imgverse · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/krafty-sprouts-media-llc/imgverse/archive/refs/heads/main.zipReadme
IMGVerse - WordPress Multi-Provider Image Plugin
IMGVerse lets you search and import images from Openverse (including iNaturalist), Unsplash, Pixabay, and Pexels into the WordPress media library—with attribution, import tracking, and a shared React UI in the media modal and block editor sidebar.
Key Features
Multi-provider search
- Openverse — no API key; filter by source (Flickr, Wikimedia Commons, iNaturalist, Met, NYPL, Rawpixel, Smithsonian, or all)
- Unsplash, Pixabay, Pexels — use your own API keys from Media → IMGVerse
- Missing keys show an in-UI empty state with a link to Media → IMGVerse (keys stay server-side; the editor only gets
hasKeybooleans)
Editor surfaces (2.0)
- Media modal — Add Media → IMGVerse tab (React mount into
MediaFrame, responsive photo grid) - Block editor sidebar — plugin sidebar with the same search UI; Insert image into the post or Set featured image after import
- Shared React app: provider nav, search, Openverse source filter, photo grid, thumbnail fallback, infinite scroll
Import & WordPress integration
- Full/large download, optional max W/H resize, then WordPress generates registered sizes
- Attachments set
post_parentwhen a post ID is available - Meta:
_imgv_imported,_imgv_import_date,_imgv_original_url,_imgv_provider,_imgv_source - Attribution templates and caching from earlier IMGVerse releases
Performance
- Intelligent caching (Redis / Memcached / object cache / DB transients)
- Rate limiting and database size protection
Installation
WordPress Admin
- Go to Plugins → Add New
- Search for "IMGVerse"
- Click Install Now and Activate
Manual Installation
- Upload a production zip via Plugins → Add New → Upload Plugin, or unzip into
/wp-content/plugins/imgverse/ - Activate through the Plugins menu
- For development:
npm installthennpm run build
Production zip rules: the archive’s top-level folder must be exactly imgverse (never imgverse-x.y.z), and entry paths must use forward slashes. See docs/release-packaging.md.
Requirements
- WordPress 5.0 or higher
- PHP 7.4 or higher
- Internet connection for provider APIs
Usage
API keys (Media → IMGVerse)
- Go to Media → IMGVerse
- Under Provider API Keys, add Unsplash Access Key, Pixabay API Key, and/or Pexels API Key as needed
- Openverse needs no key
- Optionally set default insert size and max download width/height
Media modal
- In a post or page, click Add Media
- Open the IMGVerse tab
- Choose a provider; for Openverse optionally set source (e.g. iNaturalist)
- Search, browse the grid, import into the media library, then insert via the normal WordPress media flow
Block editor sidebar
- Open the IMGVerse plugin sidebar in the block editor
- Search and import as in the media modal
- Use Insert to add an image block (chosen WP size) or Set featured image
Configuration
Search & display
- Default search behavior, results per page, infinite scroll, grid columns
Attribution
- Template variables:
{title},{creator},{source},{license},{license_url},{url} - Styles, placement (caption / description / custom field), link behavior
Import
- Default WordPress insert size (
thumbnail/medium/large/full) - Max download width/height (default 2400×2400;
0disables resize) - Quality, file naming, duplicate handling
Performance
- Cache duration/strategy, timeouts, rate limits
REST API
Namespace: imgverse/v1 (capability: upload_files)
| Method | Route | Purpose |
|---|---|---|
GET |
/wp-json/imgverse/v1/search |
Search (provider, query, Openverse source / license, pagination) |
POST |
/wp-json/imgverse/v1/import |
Import remote image (URL, meta, post_id, provider) |
Legacy AJAX handlers remain for compatibility.
Architecture (2.0)
imgverse/
├── imgverse.php
├── includes/
│ ├── class-imgv-assets.php # Enqueues build/media-modal + plugin-sidebar
│ ├── class-imgv-rest.php # REST search / import
│ ├── class-imgv-api.php # Import pipeline + provider routing
│ ├── class-imgv-admin.php # Settings (incl. API keys)
│ ├── providers/ # Openverse, Unsplash, Pixabay, Pexels
│ └── …
├── src/js/ # React App, media-modal + plugin-sidebar mounts
├── build/ # @wordpress/scripts output
├── assets/js/imgv-admin.js # Settings page only
└── assets/css/imgv-admin.css
Development
npm install
npm run build
npm run test:js
./vendor/bin/phpunit -c phpunit.xml.dist
- WordPress PHP Coding Standards
- ESLint via
@wordpress/scriptsforsrc/ - Shipping a test/production zip: docs/release-packaging.md
Security
- Input sanitization, REST/AJAX capability checks, nonces
- Provider API keys stored in options; used only on the server
- Client localization never includes raw keys
License
GPL v2 or later. See the GNU General Public License for details.
Support
- Documentation: kraftysprouts.com/imgverse/docs
- WordPress Support: wordpress.org/support/plugin/imgverse
- GitHub Issues: github.com/kraftysprouts/imgverse/issues
Credits
- Openverse API — api.openverse.org
- Unsplash, Pixabay, and Pexels APIs (user-supplied keys)
- WordPress community and contributors
Made by Krafty Sprouts Media, LLC