Everything You Need to Know About Openverse and the WordPress Photo Directory

A screenshot of the redesigned Openverse homepage, with images from a search for 'Olympic games' of athletes from many decades and backgrounds.
The redesigned wordpress.org/openverse homepage

When we announced that Openverse had joined WordPress earlier last year, we were thrilled about the exciting changes coming to the platform. Many of those updates are here.

Openverse, previously known as CC Search, is a search engine for openly licensed media. The index, which joined WordPress in mid-2021, has over 600 million Creative Commons licensed and public domain image and audio files. All files can be used free of charge.

 OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. has several new features, including:

  • A redesigned interface: Openverse has a new brand identity and user interface optimized for usability. Find the images and audio files you’re looking for and filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. results by license, source, and many other options.
  • Internationalization: Openverse is fully translated in 12 languages, with additional partial translations in other languages. We encourage anyone in the community to submit translations in their own languages.
  • Audio support: Openverse now includes songs, podcasts, samples, and other audio files from FreeSound, Wikimedia Commons, and Jamendo.
  • New image providers: The Openverse team has added two new sources of high-quality photographs, the WordPress Photo Directory and StockSnap. In addition, photo libraries such as EDUimages and Images of Empowerment are now available from Meta Search.

The Openverse project is part of the WordPress community and welcomes contributions from those who want to help it become the best openly licensed media search engine on the internet. The WordPress Photo Directory provides such an opportunity. 

What’s the WordPress Photo Directory?

The WordPress Photo Directory is both a new curated source of free, high-quality photographs and a new submission tool for Openverse, powered by the WordPress community. Without it, you’d need to use Flickr, Wikimedia Commons, or other sources to submit your work to Openverse.

The WordPress Photo Directory aims to be a trusted place for the community to create, share, discover, and reuse free and openly licensed media. All photos in the WordPress Photo Directory images are licensed with the CC0 public domain tool.

The WordPress Photo Directory welcomes contributions in different forms. One of the best ways to get involved is by submitting your photos:

  • Anyone with a wordpress.org account can submit their work to the photo directory. All submissions must meet these guidelines to ensure the quality of content. 
  • Photos will also be categorized and tagged to facilitate searching. Once a submission gets approved, it will be automatically added to the WordPress Photo Directory and the Openverse search engine.

You can also report issues with the directory, or become a photo directory moderator.

It is worth noting that Openverse and the WordPress Photo Directory are separate and independent projects. However, they are complementary in that the images from the directory are discoverable via the Openverse search. All WordPress Photo Directory images can be viewed in Openverse.

Where can you learn more about Openverse?

The Make Openverse blog is one of the best ways to follow along with the project. Feel free to reach out to any Openverse contributors on SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. #openverse, GitHub, or any other channel to learn more about the project. If you are interested in contributing code to Openverse, look at our good first issues or our guide for new contributors.

We hope you are as excited as we are about Openverse, and we look forward to your contributions!

Happy searching!


Thanks to @rmartinezduque @anjanavasan @callye @zackkrida @angelasjin for their work on this post.

#media, #openverse, #photos

Community Meeting Recap (May 17)

Takeaways

Done

  • Deployment of the API v2.5.0 and frontend v.3.3.0 [ref]
  • Catalog: Data refresh process in the catalog made clearer [ref]
  • Frontend: Saving network requests by not fetching the data twice on the search page [ref]
  • Frontend: layout PR fixed a lot of issues with scrolling and the headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. [ref]
  • Frontend: fix for the image size jumps on single result page [ref]
  • OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project.: Addition of the Renovate version management to the Openverse repo [ref]

In progress

Needs review

  • APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.: Overhaul serializer to eliminate manually-defined fields [ref]
  • API: Refactor search controller for consistency and clarity [ref]
  • Frontend: Fix for Copy attribution tabs [ref]
  • Frontend: Support for additional sources with a feature flag [ref]

Upcoming

We are reviewing the required data fields in the catalog to see if any required fields are missing and trying to backfill missing data. This will help us establish trust in the availability of the data and help clean up duplicated code that is necessary now on all layers of the stack because data is not always present.

We also plan on deployingDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. the API with the fix for email registration and the audio length query .

Openverse maintainers welcome Rebecca Widom as a new committer

It gives us great pleasure to announce that Rebecca Widom has been added as a committer to the OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. project! Her code contributions to the catalog and planning work on the addition of 3D models as a new media type have been tremendously beneficial. We’re thankful for her continued effort as a community contributor.

#openverse-committers

Community Meeting Recap (May 10)

Community notices

We’re refining our process for incorporating community contributions from frequent committers! We want to make this process easy for folks so they can continue to make excellent contributions with ease. Look out for some more information in the coming days about what being a “committer” to OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. looks like! [ref]

Takeaways

Done

  • Deployment of the API v2.5.0 [ref]
  • Two frontend milestones closed [ref]
  • APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. Dockerization [ref]
  • Mobile keyboard close on search submit [ref]
  • Updated Terms of Service [ref]
  • Bundle size reporting & deploys of Storybook & Tailwind per PR [ref]
  • (Community contribution) AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) fix for “Back to search results” on mobile [ref]
  • (Community contribution) Improved reporting for quick ingestion tasks [ref]

In progress

Needs review

  • API refactoring [ref]
  • Data refresh task unification [ref]
  • VCheckbox update [ref]
  • Critical fix app layout issues [ref]
  • Tab ordering [ref]
  • License explanation close button [ref]
  • Image jump fix [ref]

Discussions

  • Labels & emojis [ref]
  • Reprioritization of provider API key requests [ref]

Upcoming

Lots of work is underway on internal infrastructure improvements, additional monitoring, and ameliorated security measures. This effort may not be as publicly visible, but it is happening behind the scenes. We also plan on deployingDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. a new version of the frontend this week.

#openverse-weekly-community-meeting

Community Meeting Recap (April 26)

Due to the cancellation of last week’s meeting, this meeting covers the last two weeks.

Takeaways

Done

  • Exciting first contribution from a community member, improving Catalog connection configuration [ref]
  • Many TypeScript PRs merged for the frontend [ref]
  • Improvements to filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. fields in the APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. [ref]
  • Cleanup of the Smithsonian provider DAG, eliminating unneeded DAG and DB table [ref]
  • Interface bug fixes, including translation banner and audio layout updates [ref]
  • The v1.2.1 milestone was completed for the Catalog [ref]
  • Added Tailwind configuration viewer to improve lookups for tailwind values for styling the frontend [ref]

In progress

Needs review

  • Modal updates and TS utilities [ref]
  • High priority frontend bug fixes requiring review [ref]
  • Tabs component [ref]
  • Create VSources Table component, requirement for Removing old styles milestone [ref]
  • Proof of concept for Feature Flag [ref]

Upcoming

Priorities of stalled tickets have been adjusted, then issues labeled with critical priority will be addressed first, and then those with open milestones.

A new milestone was created in the frontend repository for frontend bugs which must be fixed before the next deployDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. [ref].

#openverse-weekly-community-meeting

Community Meeting Recap (April 12th)

Announcements

Next week’s meeting is canceled; the next OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. Weekly Development chat will be at 1500 UTC on April 26th.

Takeaways

Done

  • New version of the APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. released with thumbnail, detail, and related URLs are now HTTPSHTTPS HTTPS is an acronym for Hyper Text Transfer Protocol Secure. HTTPS is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. The 'S' at the end of HTTPS stands for 'Secure'. It means all communications between your browser and the website are encrypted. This is especially helpful for protecting sensitive data like banking information. [ref]
  • The Monitoring RFC has been approved and initial and with it, preliminary sketched out code merged [ref]
  • Added storybook visual regression tests [ref]
  • Advances in the TypeScriptification milestone [ref]
  • Improvements to the SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. notifications for the catalog [ref]

In progress

It needs review

  • Writing an RFC for a Monorepo [ref]
  • Improve the thumbnail service to support compression [ref]
  • Move media type categories to constants module [ref]
  • Several PRs for store migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. to use Pinia 🍍 [ref]
  • Creation of issues for addition of new type: 3D model [ref]

It needs discussion

  • The handling and meaning of the alt_files field and extensions for audio [ref]
  • Evaluate GitHubGitHub GitHub is a website that offers online implementation of git repositories that can can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ labels [ref]

Upcoming

Priorities of stalled tickets have been adjusted, then issues labeled with critical priority will be addressed first, and then those with open milestones.

#openverse-weekly-community-meeting

Community Meeting Recap (April 5th)

Takeaways

  • We continue focusing the work on 3D model based on the 3D Model RFC.

Done

  • New OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. bot [ref]
  • Goodbye to the analytics service [ref]
  • Improvements in repo to be more friendly [ref]
  • TS improvements [ref]
  • Improvements to the provider script slackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. notification [ref]
  • Apt upgrade issue in the catalog [ref]
  • Fixed of a CSRF issue [ref]
  • Fixed of an issue with black dependency [ref]

In progress

It needs review

  • Fixing focus-visible in Safari [ref]
  • TS-ification and refactoring [ref]
  • Adding Sketchfab and Thingiverse as additional sources for 3D models [ref]
  • Adding a timeout to the @_loop recipe [ref]
  • Reducing flakiness of just init [ref]
  • Updates in the ingestion server [ref]
  • Adding types to basic components [ref]

It needs discussion

  • Move media type categories to constants module [ref]
  • Filtering audio by extension [ref]

Upcoming

  • More feedback on the feature flags RFC
  • Creating issues for the 3D model integration.

#openverse-weekly-community-meeting

Community Meeting Recap (March 29th)

Takeaways

  • Next week, the team is going to begin focusing more intently on 3D model support, following the 3D Model RFC.
  • Our Monitoring RFC could use additional review.
  • Moving forward, our plan is to generally follow an every-two-weeks release schedule.

Done

In progress

High priority issues for triage/fixing

#openverse-weekly-community-meeting

A week in Openverse: 2022-03-21 – 2022-03-28

openverse

Merged PRs

  • #202: Update feature_request.md label template to remove priority and aspect
  • #198: Update bug_report.md to remove default priority label
  • #197: Update bug_report.md to remove `Expectation` section
  • #194: Add infrastructure repo to synced repo list

Closed issues

  • #157: Create OpenverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project. GitHubGitHub GitHub is a website that offers online implementation of git repositories that can can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ activity overview dashboard
  • #140: Remove “Expectation” headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. from bug report template
  • #73: [Feature] Configure ESLint and Prettier for JS scripts
  • #31: [MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress.] 3D Models
  • #30: Remove requests for reviews from closed PRs

openverse-catalog

Merged PRs

  • #441: 🔄 Synced file(s) with WordPress/openverse
  • #440: 🔄 Synced file(s) with WordPress/openverse
  • #424: Add LRU cache to `is_valid_license_info`
  • #423: Change PhyloPic date range & schedule interval
  • #422: Round duration for provider ingestion completion message
  • #421: Enable XCom pickling in Airflow
  • #397: Add data refresh to Airflow

Closed issues

  • #419: Add an `lru_cache` to `is_valid_license_info`
  • #410: Change Phylopic to @weekly
  • #377: Enable XCom pickling
  • #373: Format “Airflow DAG Load Data Complete” duration
  • #353: Data refresh orchestration DAG

openverse-api

Merged PRs

  • #591: 🔄 Synced file(s) with WordPress/openverse
  • #590: 🔄 Synced file(s) with WordPress/openverse
  • #586: 🔄 Synced file(s) with WordPress/openverse
  • #584: Replace plural `categories` as field name with singular `categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging.`
  • #583: Replace plural `categories` as field name with singular `category`
  • #580: Add CI check for uncommitted migrations
  • #577: Remove `query_serializer` for reporting endpoints
  • #576: Use `httpsHTTPS HTTPS is an acronym for Hyper Text Transfer Protocol Secure. HTTPS is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. The 'S' at the end of HTTPS stands for 'Secure'. It means all communications between your browser and the website are encrypted. This is especially helpful for protecting sensitive data like banking information.` for hyperlinked APIs by replacing the URLs

Closed issues

  • #573: Return secure URLs for the fields thumbnail, detail_url and related_url.
  • #571: Run `makemigrations` in CI to prevent merging PRs with missing migrations.

openverse-frontend

Merged PRs

  • #1187: 🔄 Synced file(s) with WordPress/openverse
  • #1186: Mock services using jest.mock
  • #1183: 🔄 Synced file(s) with WordPress/openverse
  • #1182: Fix missing nuxt types
  • #1178: Add useFetchState composable
  • #1175: Add the 3D model SVG
  • #1173: Remove redundant type and simplify media service
  • #1172: Content page component design fixes
  • #1168: Update audio categories
  • #1166: Remove source links from sources page
  • #1163: Add support for TypeScript in VueVue Vue (pronounced /vjuː/, like view) is a progressive framework for building user interfaces. https://vuejs.org/. SFCs.
  • #1153: Add local visual regression infrastructure
  • #1150: Typescriptify `api-service`
  • #1148: Hotfix for negative values in peaks
  • #1147: Strictly filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. sentry errors
  • #1144: Enable HTTPS in local development
  • #1142: fix focus outline placement button
  • #1140: Fix hero search button layout error
  • #1139: Add import extension linting rule
  • #1134: Convert license utils and constants to TS
  • #1131: Use links instead of buttons for header search type switcher
  • #1040: Convert the search store to Pinia

Closed issues

  • #1169: Audio category filter not working correctly
  • #1149: Add types to `data/api-service`
  • #1145: Add sentry ignore filters
  • #1143: Enable https in local development
  • #1138: Enable `import/extensions` rule for ESLint
  • #1136: Layout error in the hero search button in some locales
  • #1130: Search type switcher items in the header should use a link instead of a button
  • #1128: Europeana and SoundCloud don’t support search filters
  • #1122: Add 3D model icon svg to the project
  • #1121: Reduce to a single source of truth for search filters
  • #1110: Fix play/pause button focus outline placement
  • #1090: Create `VContentPage` component
  • #1037: Convert `search` store from Vuex to Pinia
  • #1019: Configure CI to run visual regression tests
  • #1017: Configure local visual regression testing
  • #1008: Providers links from Source page not working properly
  • #931: Include `utils/license.js` in `tsconfig.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.`

#openverse, #week-in-openverse

Community Meeting Recap (Mar 22nd)

Takeaways

Done

In progress

  • All media grid is nearly ready, except a few small bugs [ref]
  • HTTPSHTTPS HTTPS is an acronym for Hyper Text Transfer Protocol Secure. HTTPS is the secure version of HTTP, the protocol over which data is sent between your browser and the website that you are connected to. The 'S' at the end of HTTPS stands for 'Secure'. It means all communications between your browser and the website are encrypted. This is especially helpful for protecting sensitive data like banking information. in APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. hyperlinks [ref]
    • PR#574 proxies using NGINXNGINX NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers. https://www.nginx.com/. (changes requested)
    • PR#576 rewrites URLs (merged)
  • RFCs
  • TSification [ref]
  • HTTPS in frontend dev [ref]
  • Monorepo discussion [ref]
  • Making Overvue and the Openverse Slack integration official [ref]
  • Focus-visible in Safari is not working [ref]

High priority issues for triage/fixing

#openverse-weekly-community-meeting

A week in Openverse: 2022-03-14 – 2022-03-21

openverse

Merged PRs

  • #171: RFC: 3D Model Support

openverse-catalog

Merged PRs

  • #418: Fix invalid license urls from Finnish Museum APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.
  • #417: Use published Docker image in primary docker-compose.yml
  • #416: Fix schedule intervals on Cleveland Museum & Wikimedia Commons
  • #415: Reduce noise in NYPL ingestion
  • #414: Update API requests for Museum Victoria DAG
  • #413: Add ConnectionError to acceptable flaky exceptions for Freesound
  • #412: Add OFEO-SG subprovider
  • #409: Group test runs by module or class
  • #404: 🔄 Synced file(s) with WordPress/openverseOpenverse Openverse is a search engine for openly-licensed media, including photos, audio, and video. Openverse is also the name for the collection of related code repositories that make up the project.
  • #402: Make ‘sound’ categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. more specific
  • #395: Handle duplicate keys in load_data task

Closed issues

  • #408: Group tests by test class in pytest to prevent test collisions
  • #406: Smithsonian workflow is missing configuration for sub-providers
  • #401: NYPL provider script is noisy regarding missing primary creators
  • #392: Finnish Museum `pull_data` freezes and times out
  • #391: PhyloPic DAG detects no content even when data exists
  • #390: Museum Victoria DAG fails to pull data
  • #389: Freesound pull_data task fails when getting audio file size
  • #388: Handle duplicate keys in the TSV load_data task
  • #379: Change Wikimedia Commons schedule interval to @daily
  • #378: Use published Docker image in primary docker-compose.yml
  • #368: Rename the “ingestion server” to “data refresh”

openverse-api

Merged PRs

  • #570: Add missing migrations
  • #568: Add throttle exemptions
  • #566: 🔄 Synced file(s) with WordPress/openverse
  • #556: Add pronunciation as valid sound category
  • #554: Add parameter to exclude certain sources

Closed issues

  • #565: Create an unrestricted rate limit model
  • #553: Query param to exclude a source
  • #526: Sound category mismatch
  • #391: Monitoring all the things

openverse-frontend

Merged PRs

  • #1137: Remove lodash.findindex from dependencies
  • #1129: Fix audio track null duration and add defaultRef
  • #1120: Update tailwindcss-rtl, talkback and typescript
  • #1115: 🔄 Synced file(s) with WordPress/openverse
  • #1112: Tweaks to the Image Details page
  • #1098: Fix mature content report submission
  • #1072: Refactor media store results getters
  • #1058: Convert more utils to TypeScript
  • #1057: Run e2e tests inside a docker container

Closed issues

  • #1111: Wrong font size on image details page and has horizontal scrolling on mobile
  • #1106: Replace `lodash.isempty` with domain-specific implementation
  • #1105: Replace `lodash.findindex` with `Array.prototype.findIndex`
  • #1079: Mature content report submission is broken
  • #1076: Audio track current time sometimes being set to non-real number
  • #1056: Faulty logic for audio count on the all results view
  • #1030: Audit tree-shaking and dead-code removal when using environment flags from `node_env.ts`
  • #929: Add types to `utils/get-parameter-by-name.js`
  • #920: Add types to `utils/attribution-html.js`
  • #895: Homepage search button text doesn’t fit in some locales
  • #756: Switch to Pinia

openverse-browser-extension

Merged PRs

  • #32: 🔄 Synced file(s) with WordPress/openverse

#openverse, #week-in-openverse