Sign inTry it

Search public domain clipart on Openclipart.

Searches Openclipart, the public domain clipart library, like its search page: artwork title, link to the artwork page, and thumbnail image. First page of results (about 60 artworks). Sponsored ad slots are left out. Returns an empty list when nothing matches.

No reports yetRead-only, no login
Site
Openclipart, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
570fda947fa8…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search public domain clipart on Openclipart.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "openclipart.org/search-titles",
    "params": {
      "query": "tree"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/search/?queryServer-rendered search page /search/?query=...; read-only GET. Each artwork is a div.artwork holding a link to /detail/<id>/<slug>, an image with the title as alt text, and a picture with data-ocal-clip-id. Ad slots have no detail link and are dropped in output.

Parameters

from your agent
querystringrequiredClipart term, e.g. 'tree', 'owl', 'boat'

Returns

to your agent
artworksobject[]id, thumbnail_url, title, url
querystring

Where it can send

  • openclipart.org

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.artworks) > `0`
  • length(output.artworks[?starts_with(url, 'https://openclipart.org/detail/')]) == length(output.artworks)
  • length(output.artworks[?title != `null`]) == length(output.artworks)

Raw recipe

Served as canonical JSON from /api/v1/recipes/openclipart.org/search-titles, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/openclipart.org/search-titles | shasum -a 256
# 570fda947fa8d4c166d8c29382d5d7e7fd08e90d8e639e69f8e1e75bdc05d633
openclipart.org/search-titles.json, v1
{
  "description": "Searches Openclipart, the public domain clipart library, like its search page: artwork title, link to the artwork page, and thumbnail image. First page of results (about 60 artworks). Sponsored ad slots are left out. Returns an empty list when nothing matches.",
  "effect": "read",
  "id": "openclipart.org/search-titles",
  "keywords": [
    "openclipart",
    "clipart",
    "clip art",
    "public domain",
    "vector",
    "svg",
    "images",
    "illustrations",
    "free",
    "graphics",
    "drawings",
    "artwork"
  ],
  "output": {
    "schema": {
      "properties": {
        "artworks": {
          "items": {
            "properties": {
              "id": {
                "description": "Openclipart artwork id",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "thumbnail_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "artworks"
      ],
      "type": "object"
    },
    "value": "{query: params.query, artworks: steps.search.artworks[?title != `null` && href != `null`].{title: title, id: (clip_id && to_number(clip_id)) || `null`, url: join('', ['https://openclipart.org', href]), thumbnail_url: (thumbnail && join('', ['https://openclipart.org', thumbnail])) || `null`}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Clipart term, e.g. 'tree', 'owl', 'boat'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /search/?query=<query> returns server-rendered HTML with the first page of artworks in div.artwork tiles (detail link, image alt text as title, data-ocal-clip-id). Relative /detail and /image links are made absolute on openclipart.org. No hashed CSS classes are used. The recipe does not call other hosts.",
    "recorded_at": "2026-11-08T16:39:34.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "openclipart.org",
    "language": "en",
    "name": "Openclipart",
    "origin": "https://openclipart.org",
    "origins": [
      "https://openclipart.org"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered search page /search/?query=...; read-only GET. Each artwork is a div.artwork holding a link to /detail/<id>/<slug>, an image with the title as alt text, and a picture with data-ocal-clip-id. Ad slots have no detail link and are dropped in output.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "artworks": {
            "fields": {
              "clip_id": {
                "attr": "data-ocal-clip-id",
                "selector": "picture[data-ocal-clip-id]"
              },
              "href": {
                "attr": "href",
                "selector": "a[href^='/detail/']"
              },
              "thumbnail": {
                "attr": "src",
                "selector": "a[href^='/detail/'] img"
              },
              "title": {
                "attr": "alt",
                "selector": "a[href^='/detail/'] img"
              }
            },
            "max": 60,
            "selector": "div.artwork"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "query": "{{params.query}}"
        },
        "url": "/search/"
      }
    }
  ],
  "task": "Search public domain clipart on Openclipart",
  "tos": {
    "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.artworks) > `0`",
      "length(output.artworks[?starts_with(url, 'https://openclipart.org/detail/')]) == length(output.artworks)",
      "length(output.artworks[?title != `null`]) == length(output.artworks)"
    ],
    "example_params": {
      "query": "tree"
    },
    "max_ms": 5000
  },
  "version": 1
}