SEO Image Generator
AgriciDaniel/claude-seo
Generates Open Graph previews, blog hero images, product photos and infographics for SEO use through Gemini image tools and the banana extension.
Searches for and downloads ethically-licensed stock images via the media-management MCP server.
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-search --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .claude/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .claude/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-searchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-search --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .agents/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .agents/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-search --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .cursor/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .cursor/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/forcedotcom/sf-skills.git --path skills/experience-content-media-stock-image-search--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-search --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .gemini/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .gemini/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-searchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .github/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .github/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install forcedotcom/sf-skills experience-content-media-stock-image-search --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/experience-content-media-stock-image-search .opencode/skills/experience-content-media-stock-image-search && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "experience-content-media-stock-image-search" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-content-media-stock-image-search into .opencode/skills/experience-content-media-stock-image-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-content-media-stock-image-search", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
experience-content-media-stock-image-searchSearches for and downloads ethically-licensed stock images via the media-management MCP server.
Experience Content Media Stock Image Search is an agent skill from forcedotcom/sf-skills. Searches for and downloads ethically-licensed stock images via the media-management MCP server. Use this skill whenever a user wants an image, photo, or picture — for BOTH requests to find existing imagery ("find a stock image", "search for a photo of X", "get a royalty-free image", "find an ethical image", editorial/news photography) AND requests phrased ambiguously as creating or generating one ("create an image of a sunset", "generate a picture of a team meeting", "make me a mountain image") — treat these as…
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/download-stock-image.py`).
It sits in Media & Creative, covering Image generation. It works with Model Context Protocol. The repository describes itself as: Salesforce's curated collection of agent skills for building applications. Optimized for Agentforce Vibes, compatible with all AI tools. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4bbae5c. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
mcp__media_management__search_stock_imagesmcp__media_management__download_stock_imageFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
sfpython3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
cdn.scs.static.lightning.force.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Experience Content Media Stock Image Search loads about 3.2k tokens when it runs. Until then it costs about 256 tokens; SKILL.md has 1,095 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from forcedotcom/sf-skills at commit 4bbae5c, republished under its Apache-2.0 licence (© forcedotcom). 1,095 words, ~3,192 tokens.
.claude/skills/experience-content-media-stock-image-search/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Trigger immediately — without asking the user to choose a search method — whenever the user wants an image, photo, or picture. This covers both:
In all of these cases, search the stock library — this is the tool for obtaining an image. Do NOT offer alternative search methods (hybrid search, user-provided URL/path, etc.) and do NOT ask the user to pick one.
Does not apply to:
experience-search-coordinate)MCP tool: search_stock_images (server: media-management)
Timeout: 30 seconds
| Parameter | Required | Default | Notes |
|---|---|---|---|
query | ✅ Yes | — | Natural language search phrase (e.g. "sunset over ocean", "business meeting"), max 500 chars |
searchType | No | Creative | Creative (royalty-free stock), Editorial (rights-managed news/event imagery) |
orientation | No | (none) | Horizontal, Vertical, Square, PanoramicHorizontal, PanoramicVertical |
sortOrder | No | BestMatch | BestMatch, MostPopular, Newest |
pageSize | No | 5 | 1–100 |
page | No | 1 | 1-indexed, must be >= 1 |
Smart keyword extraction: If the query is longer than 20 words or returns no results, the tool automatically extracts short keyword phrases via LLM and retries. The effectiveQuery field in the response shows what was actually sent to the search service (null if the original query was used unchanged).
Response fields:
| Field | Notes |
|---|---|
images[] | List of results (see item fields below) |
totalCount | Total matches across all pages |
page | Current page (1-indexed) |
pageSize | Results per page |
searchRequestId | Internal correlation ID. Server-managed; not passed back through the MCP download tool. Safe to surface in debug output if useful. |
effectiveQuery | Keywords actually sent to the search service. Null if the original query was used unchanged. |
errorMessage | Non-null if the search failed |
Each images[] item:
| Field | Notes |
|---|---|
assetId | Stock asset ID — required for download. Safe to display alongside the result if useful. |
title | Image title |
caption | Image description |
thumbnailUrl | Small preview URL — use for grid display |
previewUrl | Larger comp/preview URL — use for tile display |
width | Max width in pixels |
height | Max height in pixels |
licenseModel | e.g. royaltyfree, rightsmanaged |
artist | Contributor/artist name |
collection | Collection name |
Render a numbered list with an inline thumbnail for each result, using thumbnailUrl for the image and previewUrl as the click-through link (clicking the thumbnail opens the full preview in the browser):
1. [](<previewUrl>)
**<title>** — <artist>, <width>×<height>, <licenseModel>
2. ...This is standard markdown image-in-link syntax ([](previewUrl)) — it renders an actual thumbnail, not just a text link, and clicking it navigates to previewUrl. If a client doesn't render markdown images, this degrades gracefully to a linked title.
Prefix the list with Searched for: <effectiveQuery> only if effectiveQuery is non-null and differs from the user's original query.
End the turn here. Do not auto-download, do not write files, do not ask a follow-up question. Agentforce injects its own selection UI — a question or auto-select causes a duplicate "double ask". Do not pick a result on behalf of the user.
Non-interactive mode (scheduled/headless, no user present): pick images[0] from the results and note the auto-selection in the report. Then proceed directly to Step 3.
⚠️ Each call licenses the image and spends a stock-image download credit. Only invoke after the user explicitly selects an image (or in non-interactive mode, as noted above).
Before calling download_stock_image, verify:
MCP tool: download_stock_image (server: media-management)
Timeout: 60 seconds
| Parameter | Required | Default | Notes |
|---|---|---|---|
assetId | ✅ Yes | — | Stock asset ID from the prior search_stock_images result, max 50 chars |
size | No | comp | comp (web-quality composite, default), medium_jpg, largest (full res, can exceed 100 MB), max 50 chars |
Use largest only when the user explicitly asks for full/original resolution.
Response fields:
| Field | Notes |
|---|---|
assetId | Stock asset ID that was downloaded |
managedContentBodyId | Salesforce record ID where image bytes are stored |
parentContentGenAiOutputId | Record tracking the download request |
childContentGenAiOutputId | Record linking the request to the persisted body |
byteCount | Size of the persisted image in bytes |
format | Resolved image format (e.g. jpg, png, eps, tiff, svg) |
url | URL to the persisted image — use this to download or preview it |
After a successful download_stock_image call, download the image locally and open it in VS Code.
You MUST use download-stock-image.py for this. Do not use curl, wget, or any other tool.
python3 scripts/download-stock-image.py \
--url "<url from download response>" \
--id "<assetId>" \
--format "<format from download response>" \
--previewThe script retrieves org credentials via the sf CLI (sf config get target-org and sf org auth show-access-token), downloads the image with Authorization: Bearer <accessToken> to stockimages/<assetId>.<format>, and opens it in VS Code if --preview is passed.
Pass --output-dir <path> to override the default stockimages/ directory.
Never resize or post-process the image. Use CSS (width, height, object-fit) to control display dimensions.
Vector/binary formats (eps, tiff): always pass the exact format returned by the download response — never substitute a format like jpg to work around a validation error; the file bytes won't match the extension and the file will appear corrupted. VS Code cannot render eps/tiff previews, so the script skips --preview for those formats automatically and still reports the saved path.
After a successful download, tell the user:
managedContentBodyId{artist} · {collection} (use the attribution string returned by the download response when present)| Situation | Action |
|---|---|
errorMessage non-null in search | Show it; suggest a simpler query or different searchType/orientation |
images empty | Suggest broader keywords; try switching Editorial vs Creative |
effectiveQuery differs | Inform user what the search service actually received |
| MCP tools unavailable | Use the placeholder URL below — do not download or save |
| Download fails | Show error; do NOT retry automatically — confirm with user first (each retry is billed) |
If search_stock_images and download_stock_image are both unavailable, use this URL directly as src or CSS url():
https://cdn.scs.static.lightning.force.com/content/assets/d5222d4a11e6c2b735152d7eea824ce4/placeholder.svgPlaceholder policy: There is only one placeholder URL. Do not download it, modify it, or generate alternative placeholders using Python, ImageMagick, or any other tool. If the user asks for a placeholder of a specific size or format, tell them only this URL is available and direct them to use CSS to scale it at the point of use.
© forcedotcom, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in skills/experience-content-media-stock-image-search of forcedotcom/sf-skills.
Open the folder on GitHubat commit 4bbae5c
Experience Content Media Stock Image Search next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Experience Content Media Stock Image Search this skillforcedotcom/sf-skills | 1.1k | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| SEO Image GeneratorAgriciDaniel/claude-seo | 19k | 2 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Gauntlet Loopduolahypercho/gauntlet-loop | 165 | — | ~689 | Automated safety check: Pass | MIT | |
| Blog ImageAgriciDaniel/claude-blog | 2.3k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Art StyleDV0x/creative-ad-agent | 120 | — | ~477 | Automated safety check: Pass | MIT | |
| ContentGerstep/cybos | 104 | — | ~616 | Automated safety check: Pass | None |
AgriciDaniel/claude-seo
Generates Open Graph previews, blog hero images, product photos and infographics for SEO use through Gemini image tools and the banana extension.
duolahypercho/gauntlet-loop
GAME skill. An agent skill from duolahypercho/gauntlet-loop.
AgriciDaniel/claude-blog
AI image generation and editing for blog content powered by Gemini via MCP.
DV0x/creative-ad-agent
Creates visual prompts from hooks. An agent skill from DV0x/creative-ad-agent.
Gerstep/cybos
Generate posts, essays and images following brand guidelines.
SlavaSexton/ComfyUI-Agent-Kit
Drives a local ComfyUI install over its HTTP API to generate and edit images, video and audio, with per-model prompt recipes and workflow guidance.
forcedotcom/sf-skills
Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins.
forcedotcom/sf-skills
Data Cloud 360° view of a single Agentforce session. An agent skill from forcedotcom/sf-skills.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply SLDS-compliant UI using the correct blueprints, styling hooks, utility classes, and icons.
forcedotcom/sf-skills
Lightning Web Components with PICKLES methodology and 165-point scoring.
Works with
Categories
Searches for and downloads ethically-licensed stock images via the media-management MCP server. Experience Content Media Stock Image Search is an agent skill from forcedotcom/sf-skills. Searches for and downloads ethically-licensed stock images via the media-management MCP server.
Experience Content Media Stock Image Search fits situations like: A user wants an image; picture — for BOTH requests to find existing imagery (find a stock image; search for a photo of X; get a royalty-free image.
Run `npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a claude-code`. Or copy the skill folder (skills/experience-content-media-stock-image-search in forcedotcom/sf-skills) into .claude/skills/experience-content-media-stock-image-search in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a codex`. Or copy the skill folder (skills/experience-content-media-stock-image-search in forcedotcom/sf-skills) into .agents/skills/experience-content-media-stock-image-search in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forcedotcom/sf-skills --skill experience-content-media-stock-image-search -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/experience-content-media-stock-image-search, .gemini/skills/experience-content-media-stock-image-search, .github/skills/experience-content-media-stock-image-search and .opencode/skills/experience-content-media-stock-image-search in your project.
Going by SKILL.md and its folder, Experience Content Media Stock Image Search needs Python for the scripts in its folder and the command-line tools its instructions call (sf and python3). Our summary lists: Python 3. Its frontmatter pre-approves these tools: mcp__media_management__search_stock_images, mcp__media_management__download_stock_image.
SKILL.md names 1 domain. In commands or code: cdn.scs.static.lightning.force.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Experience Content Media Stock Image Search is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Experience Content Media Stock Image Search: SEO Image Generator (AgriciDaniel/claude-seo, 19k stars), Gauntlet Loop (duolahypercho/gauntlet-loop, 165 stars), Blog Image (AgriciDaniel/claude-blog, 2.3k stars) and Art Style (DV0x/creative-ad-agent, 120 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
forcedotcom (a GitHub organization) maintains it in forcedotcom/sf-skills, which has 1,067 GitHub stars. The repository holds 252 skills in this directory. The repository was last updated on October 9, 2026.
Source: forcedotcom/sf-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.