# Free assets for commercial use

agh can search libraries of openly licensed sounds and images and fill a request with one, so a door creak or a potion icon doesn't wait for someone to make it. Search shows only licenses that allow commercial use, and agh keeps where each file came from and its license with the asset. When you publish, it also writes the credits your game has to show. Every plan includes search, with a daily number of searches.

## Where the files come from

agh searches [Openverse](https://openverse.org), WordPress's search of openly licensed media. For audio it covers Freesound, Jamendo, ccMixter and Wikimedia Commons; for images it covers Wikimedia Commons, Flickr and many museums. Freesound sounds come as the high-quality version Freesound streams (MP3), not the original upload.

## Licenses

Only these licenses are shown, and you can narrow a search to some of them:

| License | What it asks |
| --- | --- |
| CC0, Public Domain Mark | Nothing. No credit needed. |
| CC BY | Credit the creator. |
| CC BY-SA | Credit the creator, and share changed versions of the file under the same license. |

NonCommercial (NC) licenses are never shown, since a game is sold. NoDerivatives (ND) licenses aren't shown either, because scaling or converting a file changes it.

agh records the license the library gave when you picked the file, with links to the original and to the license. Libraries can be wrong: check an important asset's page before you ship it.

## Fill a request while you approve it

In **Approve**, each sound or image request has **Find free assets**. The search starts from the request's brief; change the words, or use the license chips to narrow it. Play a sound or look at a picture, pick one, then choose **Use this sound** or **Use this image**. The request shows the file you picked with **Change** and **Remove**.

When you approve the batch, a filled request skips claiming. If the file matches the request's spec, it's accepted and goes to **Publish**. If it doesn't (wrong size or length, or a different format than the path names), it goes to **Review** so you can scale or replace it. The Approve button says how many requests it fills.

A coding agent can suggest a free asset for a request it files. The suggestion shows in Approve, marked as suggested, with **Accept** and **Find others**. A suggestion nobody accepts goes to Review when the batch is approved.

## Fill an open request

Requests already approved have **Find free assets** in **Open requests**. A file picked there is delivered for review like any other.

## What agh does with the file

- An MP3 for a request whose path ends in `.ogg` or `.opus` is converted to Ogg Opus.
- Provenance starts as **unknown**: the library doesn't say how a file was made, and some are AI-made. Change it in review if you know. Made by says who made it and where it came from.
- Review shows a **Source** card with the library, the original's page, the author, the license and who picked it.
- Publishing lists the source, author and license of each found asset in `.agh/provenance.yaml`, and writes `.agh/credits.md` with the credit line for each CC BY and CC BY-SA asset, as Creative Commons recommends. Copy those lines into your game's credits.

## Searches per day

Each search counts toward the project's daily allowance, which starts again at midnight UTC: 30 a day on Free, 100 on Starter, 300 on Indie, 1,000 on Studio, and no limit on Enterprise. The search panel shows how many are left. A search that fails, for example because Openverse isn't answering, doesn't count.

When Openverse stops answering, agh says so straight away for the next couple of minutes instead of making each search wait, then tries again. Searches agh has already run in the last hour still come back.

## Agents and the API

The MCP tools are `find_free_assets` (search for a request with `id`, or by `media` and `query`, optionally narrowed by `licenses`) and `use_free_asset` (fill a request with an item's `id`; `remove` takes it off again before approval). An agent can use them only on requests it filed that aren't approved yet, so what it picks is a suggestion for a person to accept.

Over HTTP:

- `GET /projects/{id}/free-assets?asset=<asset id>` or `?media=audio&q=door creak`, with optional `licenses=cc0,by` and `page`.
- `POST /projects/{id}/assets/{asset}/free-asset` with `{"item": "<item id>"}` fills the request.
- `DELETE /projects/{id}/assets/{asset}/free-asset` takes the file off a request that isn't approved yet.
- `POST /projects/{id}/assets/{asset}/free-asset/accept` accepts an agent's suggestion.

## Coming later

Ranking results by how close they look or sound to your accepted assets (style match, on Starter and above), Kenney's CC0 packs, searching Freesound directly, and paid stores.
