いらすとや illustrations
いらすとや is a Japanese library of ~25,000 free flat illustrations. This skill searches it, downloads the transparent PNGs and places them in whatever you are building.
0. One call does it all
Search, ranking and download happen in a single shell call (~1.5s). Resolve the script path and the shell once per session first (§0.1), then:
python3 scripts/irasutoya.py get "バナナを持ったサル"
tried: バナナを持ったサル | バナナ サル | ばなな 猿 | バナナ (10 hits)
1* バナナを持った猿のイラスト(申年・干支) | eto_saru_banana2.png | 動物キャラ,干支
saved ~/Downloads/irasutoya/eto_saru_banana2.png (389KB 776x800) src https://...
2 頭にバナナを乗せた猿のイラスト | eto_saru_banana.png | 動物キャラ,干支
| Command | What it does |
|---|---|
find "<japanese>" [n] | search only, 10 candidates |
get "<japanese>" [n] | search + download the top n (default 1) |
browse "<label>" [n] | list everything under one label |
random [n] | n random illustrations out of ~25,000 |
labels ["<substr>"] | list the site's 239 labels |
b64 <query|path> [px] | print a data URI — expensive, see §4 |
| Flags | --label "<name>" keep only results with that label / --get also download what was listed / --open --urls --json |
- Need several?
get "..." 3downloads them in one call. Never loop one at a time. - Downloads land in
~/Downloads/irasutoya/. Override withIRASUTOYA_OUT=/some/diror--out. - The default is the original upload — often ~1100×1160 and close to 1 MB. That is the right default (asking for a fixed size makes Blogger downscale silently), but it is rarely the right size. Pick one per §3 before downloading.
- Requires network access to
www.irasutoya.comandblogger.googleusercontent.com. Agent sandboxes commonly deny both — §0.1 before assuming the site is down.
0.1 Which shell, which script
This skill runs in two kinds of host: one where the default shell reaches the internet (Claude Code, most local setups) and one where it does not (agent sandboxes such as Claude Cowork). Resolve both questions once per session, before the first call, and do not re-probe afterwards.
Find the script. First path that exists wins:
scripts/irasutoya.pynext to this SKILL.md — bundled and plugin installs~/.claude/skills/irasutoya/scripts/irasutoya.py— host-wide install- neither — bootstrap it, then use that path:
curl -fsSL https://raw.githubusercontent.com/hsol/irasutoya/main/scripts/irasutoya.py \ -o /tmp/irasutoya.py
Pick the shell. The site has to be reachable from whichever shell actually runs the
command. A denied sandbox fails as curl: (56) CONNECT tunnel failed, response 403 or a
bare 000, which reads like the site being down and is not. Probe once:
curl -sS -o /dev/null -w "%{http_code}\n" --max-time 8 \
"https://www.irasutoya.com/feeds/posts/summary?q=%E7%8C%AB&alt=json&max-results=1"
| Probe result | Route |
|---|---|
200 | Use the default shell. Nothing else to do |
403 / 000 / timeout, and a host-side process tool exists | Run every call through that tool. In Claude Cowork it is Desktop Commander start_process, which executes on the real machine outside the sandbox |
403 / 000, no host-side tool | §7 |
Two rules on the host-side route, both of which fail silently if you skip them:
- Absolute paths only, for the script and for
--out. The host shell does not share the sandbox working directory, and a relative path lands somewhere you cannot read. - Download into a folder the session can see — a connected or shared folder — not
~/Downloads. The session cannot open host paths outside it. §4 covers the rest.
1. When to reach for it
Add an illustration without being asked when building:
- design canvases and artboards, artifact web pages, landing pages, posters
- slide decks (HTML slides,
.pptx) - reports, guides, manuals (
.docx, PDF) - blog posts, newsletters, social posts
Skip it for code and config files, data-table-only output, when the user said "no images", and for solemn or legally operative documents (contracts, official filings, legal briefs). If the tone is ambiguous, add it and say so in one line.
Density: 0–1 per slide, at most 1 per document section, roughly 1 per blog subheading. Never add one just to fill space.
2. Choosing the query
Queries must be Japanese, but the script tries the orthographic variants for you, in parallel:
- particle stripping (
をのがにはでへと) — only after a noun, soのりkeeps itsの - katakana ↔ hiragana (
リンゴ↔りんご) - kanji ↔ katakana synonyms (
猿↔サル,眼鏡↔メガネ,卵↔タマゴ) — titles use only one of the two, and which one is unpredictable - verb-tail stripping (
持ったサル→サル)
Ranking demotes substring matches, so searching サル no longer surfaces
アンドリューサルクス (a prehistoric mammal).
So just pick the concept word. If you get 0 hits, do not retry with different spellings — call once more with a broader single noun.
| Concept | Query | Concept | Query |
|---|---|---|---|
| meeting | 会議 / ミーティング | worry, trouble | 悩む / 困る / トラブル |
| video call | ビデオ会議 / オンライン | warning | 注意 / 警告 / びっくり |
| presenting | プレゼン / 発表 | question | 質問 / はてな |
| desk work, remote | パソコン / テレワーク | success, celebration | 喜ぶ / 成功 / 万歳 |
| programming | プログラマー / プログラミング | mistake, apology | ミス / 謝る |
| AI, robots | AI / 人工知能 / ロボット | deadline, time | 締め切り / 時計 / 急ぐ |
| data, charts | グラフ / データ / 分析 | checklist, done | チェック / リスト |
| growth, decline | 上昇 / 成長 / 下降 | explaining, guiding | 説明 / 案内 / 指差し |
| money, budget | お金 / 予算 / 費用 | shopping, payment | 買い物 / キャッシュレス |
| contracts, paperwork | 契約 / 書類 / サイン | delivery | 宅配 |
| law | 弁護士 / 裁判 / 法律 | health, hospital | 病院 / 医者 / 健康 / 運動 |
| security | セキュリティ / ハッカー | study, school | 勉強 / 学校 / 学生 |
| sales, support | 営業 / 接客 / 相談 / 電話 | burnout | 疲れる / 過労 |
| email, notification | メール / 通知 | seasons, holidays | 桜 / 花火 / 紅葉 / 雪 / 正月 |
| teamwork | 協力 / チームワーク / 握手 | frames, decoration | 枠 / 吹き出し / 矢印 / 飾り罫線 |
| hiring, interviews | 採用 / 面接 / 就職 | ideas | ひらめき / アイデア |
- Pin down the person by appending a word:
会議 会社員,勉強 女性,プレゼン 子供 - Pick the expression from the suffix in the result title:
(笑顔)(真剣)(困った顔) - The filename is the description.
kaigi_hakui_shinken.png= meeting · white coat (doctor) · serious face - Within one deliverable, stay in one filename-prefix family so the set looks coherent.
--labelis the blunt version of the same idea:find "会議" --label 会社keeps the office-worker cut and drops the doctors and construction workers.labelslists what is available,browse "<label>"walks a whole category when you need a matching set. (Do not put the label in the feed path together withq— Blogger does not AND the two, and you get results that lack the label entirely. Filter client-side, which is what--labeldoes.) - Turn abstract verbs into the object that represents them: copying →
コピー機, pasting →テープのり/接着剤, searching →虫眼鏡
3. Placing the file
Pick the size from where it is going. Pass it at download time — re-fetching later costs another round trip, and resizing a PNG locally costs quality you didn't need to lose.
| Going into | --size | Why |
|---|---|---|
| Print, poster, anything that fills the frame | (omit — original) | You cannot get the pixels back later |
| Slide deck, document body, web page | 800 | Half the bytes, no visible difference |
| Inline icon, list bullet, avatar | 320 | ~40 KB instead of ~1 MB |
| base64 into an artifact | 240 or less | See §4 — every byte crosses the conversation |
A ten-image deck is ~10 MB at the original and ~4 MB at --size 800. When you a