Lazyweb
Design with evidence, not vibes. Use Lazyweb when the user asks for product UI
inspiration, competitive design analysis, best-practice research, quick screen
examples, feedback on an existing interface, creative design ideas, or
paywall optimization, monetization, and A/B test research.
This high-level skill routes to the right Lazyweb mode. Do not reimplement the
mode here. Hand off by invoking the mode's installed skill by name, using
its dedicated MCP tool, or fetching its workflow over MCP — see Routing
below. Never point the agent at a skills/<name>/SKILL.md file path: that
layout exists only in the source repo, not in the installed skill, so the path
does not resolve.
First Run
If Lazyweb MCP has not been configured in this client, run the standalone setup:
curl -fsSL https://www.lazyweb.com/install.sh | bash
The installer creates or reuses ~/.lazyweb/lazyweb_mcp_token, installs the
visible Lazyweb skills into supported local coding clients, and configures the
Lazyweb MCP server at https://www.lazyweb.com/mcp.
Lazyweb MCP tokens are free no-billing bearer tokens for UI reference tools.
They do not authorize purchases, paid spend, private user data, or destructive
actions. Keep tokens out of public git, but ignored local MCP config is fine.
After setup, show the user what Lazyweb can do:
- Fetch
https://www.lazyweb.com/api/mcp/welcome-message and show the welcome message.
- List MCP tools and confirm
lazyweb_get_workflows is present.
- Call
lazyweb_get_workflows with {"operation":"list","task_context":"first run Lazyweb capabilities","skill":"lazyweb"}.
- Summarize the returned workflows as Lazyweb's super powers.
Do not call lazyweb_get_flows for the first-run capability guide. That is a
separate tool for ordered product journeys.
If MCP tools are unavailable, tell the user to run the installer above, then
continue with web research only if they want a degraded fallback.
Routing
Choose exactly one mode. lazyweb-design is the default for any design work —
design, redesign, optimize, improve, critique, or build any product screen (paywall,
pricing, landing, onboarding, settings, dashboard, etc.). It runs the one-call
server-side lazyweb_generate_report and hosts a full report. Route to
lazyweb-quick-search ONLY when the user explicitly asks for a quick reference /
examples lookup — never as the default for design work, and never as the way to
produce a report.
| User intent |
How to run |
| DEFAULT for design work — design, redesign, optimize, improve, critique, or build ANY product screen (paywall, pricing, landing, signup, onboarding, dashboard, settings, etc.) |
Invoke the lazyweb-design skill (one-call server-side lazyweb_generate_report) |
| The user explicitly asks for a quick reference / examples lookup ("quick search", "just show me a few references", "look up examples first") — and does NOT want a report |
Invoke the lazyweb-quick-search skill |
| Update local Lazyweb skills, reinstall Lazyweb, or sync Lazyweb into agentic IDEs |
Invoke the lazyweb-update skill |
| Map how a product's agent/app talks to its backend as a flow chart / architecture diagram, and save it |
Invoke the lazyweb-generate-flowchart skill |
| Update / refresh an existing flow chart to match the current code (it's stale, the code moved on) |
Invoke the lazyweb-update-flowchart skill |
| Explain how something works / why something happened with a diagram — a walkthrough, failure trace, or hypothetical (NOT recording the current state) |
Invoke the lazyweb-explain-flow skill |
| Propose reviewable UI / flow changes on a diagram for the user to Accept/Decline, then apply the accepted ones |
Invoke the lazyweb-propose-ui-changes skill |
| A/B tests, experiment examples, pricing, trials, lifecycle, or monetization strategy |
Use the lazyweb_search_ab_tests MCP tool (mobile A/B evidence) |
When in doubt between the two, choose lazyweb-design: it is the default for
producing anything (a redesign, a critique, a report). Reach for
lazyweb-quick-search only on an explicit reference-lookup request, and never as a
fallback for building a report.
How to run, explained. Only lazyweb-design, lazyweb-quick-search, and
lazyweb-update are installed as local skills — invoke them by name, which
resolves regardless of how the host lays out skill directories. A/B-test
evidence is reached through the lazyweb_search_ab_tests MCP tool above. The
create objective inside lazyweb-design fetches the lazyweb-design-create
backend over MCP. Never substitute a skills/<name>/SKILL.md file read for any
of these — that path does not exist in the install.
Retired skills — route their intent to one of the two skills above. These
earlier Lazyweb skills no longer exist. Do NOT try to invoke or fetch the old
name; route the intent instead:
| Retired skill / intent |
Use now |
lazyweb-optimize-paywall, lazyweb-design-improve, lazyweb-optimize-sign-up — optimize or improve an existing screen |
lazyweb-design (objective optimize / improve) |
lazyweb-design-research, lazyweb-deep-design-research, lazyweb-design-brainstorm, lazyweb-design-best-practices — research, competitive analysis, best practices, "what do top apps do", creative ideas |
lazyweb-quick-search for references; lazyweb-design (objective create) for a full new-screen design |
lazyweb-quick-references, lazyweb-lite-design-research — quick examples / UI references |
lazyweb-quick-search |
lazyweb-paywall-cta — CTA copy |
lazyweb-design (the CTA is part of the screen) |
lazyweb-ab-test-research — A/B / experiment evidence |
the lazyweb_search_ab_tests MCP tool |
Calling lazyweb_search directly under one of these retired skill tags is no
longer supported — the server rejects it and points back here. lazyweb_search
is reached only INSIDE lazyweb-quick-search (references) and the server-side
lazyweb-design pipeline (which searches internally); it is not a direct
external tool for any retired skill.
For a bare /lazyweb request, briefly explain the modes above and ask which
one the user wants. Default to lazyweb-design for any design/redesign/optimize/
improve/critique/build work — it is the one-call server-side report path. Only
recommend lazyweb-quick-search when the user has explicitly asked for a quick
reference / examples lookup and does not want a report — never as the default for
design work and never as a way to build a report. Paywall CTA copy is part of the
screen, so it also goes to lazyweb-design. lazyweb-design is the
user-facing umbrella for ANY product screen and routes on objective. Pick by
the user's INTENT, not by whether they have a screenshot: route an EXISTING
screen they want to optimize/improve to lazyweb-design (objectives optimize
and improve), and route designing a NEW screen FROM SCRATCH to lazyweb-design
too (objective create, which hands off internally to the lazyweb-design-create
backend — never route users straight to lazyweb-design-create). Route explicit
install, update, refresh, or stale slash-command requests to lazyweb-update.
Mode Handoff
When a mode is clear:
- Reach the mode by the mechanism in the table above — invoke the installed
skill by name (
lazyweb-design, lazyweb-quick-search, lazyweb-update),
use the mode's dedicated MCP tool, or fetch its workflow with
lazyweb_get_workflows. Do NOT read a skills/<name>/SKILL.md file path —
that layout exists only in the source repo, not in the install.
- Follow that mode from the top.
- Use Lazyweb MCP tools for database-backed evidence.
- Embed Lazyweb database images directly with returned
imageUrl/image_url values, and save only current-state or web-captured screenshots locally when the selected mode requires them.
- Cite whether each reference came from Lazyweb or the web.
The installed mode skills (lazyweb-design, lazyweb-quick-search,
lazyweb-update) may also be called directly by the user from the slash menu.
This /lazyweb skill remains the entry point for hosts that show only one
downloaded skill or where the user is not sure which mode to use — there, reach
the unsurfaced modes via their MCP tool or lazyweb_get_workflows, never a
local file path.
Autorouter Check (one-time, after the request is served)
Lazyweb has an autorouter: a small, marker-delimited routing block written
into each host agent's global instruction file so design questions route to
the right Lazyweb mode without anyone invoking a skill. This skill carries a
local fallback offer for installs that never saw the setup prompt.
AFTER completing the user's actual request — never before, and never
interrupting unrelated work — run this check at most once per session, and
only when this skill was explicitly invoked:
- Skip silently unless BOTH are true:
~/.lazyweb/router.manifest.json is missing or empty
grep -q "^router_declined=1" ~/.lazyweb/config finds nothing
- Ask the user one plain question (no host-specific tool): "Want me to
install Lazyweb's autorouter so design questions route to the right mode
automatically? I'd run
~/.lazyweb/bin/lazyweb-router install, which adds
a marked routing section to your agents' global instruction files."
- On yes: run
~/.lazyweb/bin/lazyweb-router install --all --yes and show
the user what was written where. On no: run
~/.lazyweb/bin/lazyweb-router decline. Either way, never ask again —
the manifest or the decline flag silences this check and the
once-per-session server-side offer alike.
Search Discipline
These rules apply to every lazyweb_search call in every mode:
- Always run at least one real search for the user's actual screen. Example
or connectivity queries (like "pricing page") teach the user nothing about
their own project — follow them immediately with the screen they are building.
- One screen, one search. When the user is building a whole app or page,
run one query per screen/section (onboarding, home, paywall, settings,
checkout…) instead of a single broad query. Pass
platform ("mobile" or
"desktop") and company: "<app>" when the user names a reference product.
- Never repeat an identical query — results are deterministic. To see more,
pass
offset (e.g. {"query":"onboarding quiz","limit":20,"offset":20});
the response's pagination.next_offset gives the next page.
- Read
coverage and warnings on every response and obey them. On
no_matches or low_coverage, use the closest result anyway, strip the
query to its core 2-6 word UI pattern, or tell the user the pattern is not
in the library — do not rephrase the same concept in a loop. Style
adjectives ("dark", "minimal", "editorial") are not searchable facets yet;
drop them from the query and judge style from the returned images.
- On a
company_not_in_library warning, pick one of the suggested closest
companies or drop the company filter — do not retry other spellings of the
same brand.
Tool Rules
Pass skill: "lazyweb" on every call. Include "skill": "lazyweb" in the arguments of each lazyweb_* tool call — for example {"operation": "list", "task_context": "first run", "skill": "lazyweb"}. This is optional analytics metadata Lazyweb uses to understand which skills are used; never drop or change a real argument for it.
- Always inspect the live MCP tool list before assuming optional filters or
backend/internal aliases are available.
- The current public gateway normally exposes
lazyweb_health,
lazyweb_search, lazyweb_find_similar, lazyweb_compare_image,
lazyweb_list_categories, lazyweb_get_workflows, lazyweb_get_flows,
lazyweb_search_ab_tests, and lazyweb_paywall_cta_research. The
full-pipeline run tools
paywall_design_run / paywall_design_check_status (and the parallel
signup_design_run / signup_design_check_status) are gated behind
env flags and may also be exposed — check the live tool list.
- All current public Lazyweb MCP tools and visible workflow skills are free,
including
lazyweb_search_ab_tests, lazyweb_paywall_cta_research,
paywall_design_run, and signup_design_run when those run tools are
exposed by the live schema. If a tool is missing or returns no matching
evidence, treat that as an availability or coverage issue, not a billing gate.
- Richer internal/backend surfaces may expose
lazyweb_find_experiments,
lazyweb_recent_experiments, or
list_companies_by_categories; use them only when the live tool schema shows
them.
- Pass
high_design_bar: true only to tools whose live schema exposes it, and
only when the user asks for premium, stronger, high-design-bar, or
best-designed examples.
- Screenshot-bearing tools return optimized image URLs. Supabase storage-backed URLs
are signed for 365 days. Do not request or pass screenshot IDs, and do not
construct storage URLs from raw paths.
lazyweb_search_ab_tests is mobile-only A/B test evidence. It uses
category as the industry filter and forwards product/company as target
context. Do not use them to force an exact company match or trust a
zero-result answer caused by an exact product/company filter.
lazyweb_find_similar accepts image_url or image_base64 plus mime_type;
it does not take a screenshot ID.
lazyweb_compare_image does real image-similarity. Always send
image_base64 — localhost, file paths, and web-page URLs are unreachable
from the server. When you only have a page URL or a running local app,
capture it yourself with your client's built-in screenshot/browser tool
(browser screenshot, Playwright, device screenshot) and pass the capture as
image_base64. Failed calls return a how_to_fix field — follow it instead
of retrying the same input.
Source: aboul3ata/lazyweb-skill — distributed by TomeVault.
1---2name: aboul3ata-lazyweb-skill-lazyweb-skill3description: Lazyweb4---56# Lazyweb78Design with evidence, not vibes. Use Lazyweb when the user asks for product UI9inspiration, competitive design analysis, best-practice research, quick screen10examples, feedback on an existing interface, creative design ideas, or11paywall optimization, monetization, and A/B test research.1213This high-level skill routes to the right Lazyweb mode. Do not reimplement the14mode here. Hand off by **invoking the mode's installed skill by name**, using15its **dedicated MCP tool**, or **fetching its workflow over MCP** — see Routing16below. Never point the agent at a `skills/<name>/SKILL.md` file path: that17layout exists only in the source repo, not in the installed skill, so the path18does not resolve.1920## First Run2122If Lazyweb MCP has not been configured in this client, run the standalone setup:2324```bash25curl -fsSL https://www.lazyweb.com/install.sh | bash26```2728The installer creates or reuses `~/.lazyweb/lazyweb_mcp_token`, installs the29visible Lazyweb skills into supported local coding clients, and configures the30Lazyweb MCP server at `https://www.lazyweb.com/mcp`.3132Lazyweb MCP tokens are free no-billing bearer tokens for UI reference tools.33They do not authorize purchases, paid spend, private user data, or destructive34actions. Keep tokens out of public git, but ignored local MCP config is fine.3536After setup, show the user what Lazyweb can do:37381. Fetch `https://www.lazyweb.com/api/mcp/welcome-message` and show the welcome message.392. List MCP tools and confirm `lazyweb_get_workflows` is present.403. Call `lazyweb_get_workflows` with `{"operation":"list","task_context":"first run Lazyweb capabilities","skill":"lazyweb"}`.414. Summarize the returned workflows as Lazyweb's super powers.4243Do not call `lazyweb_get_flows` for the first-run capability guide. That is a44separate tool for ordered product journeys.4546If MCP tools are unavailable, tell the user to run the installer above, then47continue with web research only if they want a degraded fallback.4849## Routing5051Choose exactly one mode. **`lazyweb-design` is the default for any design work** —52design, redesign, optimize, improve, critique, or build any product screen (paywall,53pricing, landing, onboarding, settings, dashboard, etc.). It runs the one-call54server-side `lazyweb_generate_report` and hosts a full report. Route to55`lazyweb-quick-search` ONLY when the user explicitly asks for a quick reference /56examples lookup — never as the default for design work, and never as the way to57produce a report.5859| User intent | How to run |60|---|---|61| **DEFAULT for design work** — design, redesign, optimize, improve, critique, or build ANY product screen (paywall, pricing, landing, signup, onboarding, dashboard, settings, etc.) | **Invoke the `lazyweb-design` skill** (one-call server-side `lazyweb_generate_report`) |62| The user **explicitly** asks for a quick reference / examples lookup ("quick search", "just show me a few references", "look up examples first") — and does NOT want a report | **Invoke the `lazyweb-quick-search` skill** |63| Update local Lazyweb skills, reinstall Lazyweb, or sync Lazyweb into agentic IDEs | **Invoke the `lazyweb-update` skill** |64| Map how a product's agent/app talks to its backend as a **flow chart / architecture diagram**, and save it | **Invoke the `lazyweb-generate-flowchart` skill** |65| **Update / refresh** an existing flow chart to match the current code (it's stale, the code moved on) | **Invoke the `lazyweb-update-flowchart` skill** |66| **Explain** how something works / why something happened with a diagram — a walkthrough, failure trace, or hypothetical (NOT recording the current state) | **Invoke the `lazyweb-explain-flow` skill** |67| Propose reviewable **UI / flow changes** on a diagram for the user to Accept/Decline, then apply the accepted ones | **Invoke the `lazyweb-propose-ui-changes` skill** |68| A/B tests, experiment examples, pricing, trials, lifecycle, or monetization strategy | Use the `lazyweb_search_ab_tests` MCP tool (mobile A/B evidence) |6970When in doubt between the two, choose `lazyweb-design`: it is the default for71producing anything (a redesign, a critique, a report). Reach for72`lazyweb-quick-search` only on an explicit reference-lookup request, and never as a73fallback for building a report.7475**How to run, explained.** Only `lazyweb-design`, `lazyweb-quick-search`, and76`lazyweb-update` are installed as local skills — invoke them **by name**, which77resolves regardless of how the host lays out skill directories. A/B-test78evidence is reached through the `lazyweb_search_ab_tests` MCP tool above. The79`create` objective inside `lazyweb-design` fetches the `lazyweb-design-create`80backend over MCP. Never substitute a `skills/<name>/SKILL.md` file read for any81of these — that path does not exist in the install.8283**Retired skills — route their intent to one of the two skills above.** These84earlier Lazyweb skills no longer exist. Do NOT try to invoke or fetch the old85name; route the *intent* instead:8687| Retired skill / intent | Use now |88|---|---|89| `lazyweb-optimize-paywall`, `lazyweb-design-improve`, `lazyweb-optimize-sign-up` — optimize or improve an existing screen | `lazyweb-design` (objective `optimize` / `improve`) |90| `lazyweb-design-research`, `lazyweb-deep-design-research`, `lazyweb-design-brainstorm`, `lazyweb-design-best-practices` — research, competitive analysis, best practices, "what do top apps do", creative ideas | `lazyweb-quick-search` for references; `lazyweb-design` (objective `create`) for a full new-screen design |91| `lazyweb-quick-references`, `lazyweb-lite-design-research` — quick examples / UI references | `lazyweb-quick-search` |92| `lazyweb-paywall-cta` — CTA copy | `lazyweb-design` (the CTA is part of the screen) |93| `lazyweb-ab-test-research` — A/B / experiment evidence | the `lazyweb_search_ab_tests` MCP tool |9495Calling `lazyweb_search` directly under one of these retired skill tags is no96longer supported — the server rejects it and points back here. `lazyweb_search`97is reached only INSIDE `lazyweb-quick-search` (references) and the server-side98`lazyweb-design` pipeline (which searches internally); it is not a direct99external tool for any retired skill.100101For a bare `/lazyweb` request, briefly explain the modes above and ask which102one the user wants. Default to `lazyweb-design` for any design/redesign/optimize/103improve/critique/build work — it is the one-call server-side report path. Only104recommend `lazyweb-quick-search` when the user has explicitly asked for a quick105reference / examples lookup and does not want a report — never as the default for106design work and never as a way to build a report. Paywall CTA copy is part of the107screen, so it also goes to `lazyweb-design`. `lazyweb-design` is the108user-facing umbrella for ANY product screen and routes on `objective`. Pick by109the user's INTENT, not by whether they have a screenshot: route an EXISTING110screen they want to optimize/improve to `lazyweb-design` (objectives `optimize`111and `improve`), and route designing a NEW screen FROM SCRATCH to `lazyweb-design`112too (objective `create`, which hands off internally to the `lazyweb-design-create`113backend — never route users straight to `lazyweb-design-create`). Route explicit114install, update, refresh, or stale slash-command requests to `lazyweb-update`.115116## Mode Handoff117118When a mode is clear:1191201. Reach the mode by the mechanism in the table above — **invoke the installed121 skill by name** (`lazyweb-design`, `lazyweb-quick-search`, `lazyweb-update`),122 use the mode's **dedicated MCP tool**, or **fetch its workflow** with123 `lazyweb_get_workflows`. Do NOT read a `skills/<name>/SKILL.md` file path —124 that layout exists only in the source repo, not in the install.1252. Follow that mode from the top.1263. Use Lazyweb MCP tools for database-backed evidence.1274. Embed Lazyweb database images directly with returned `imageUrl`/`image_url` values, and save only current-state or web-captured screenshots locally when the selected mode requires them.1285. Cite whether each reference came from Lazyweb or the web.129130The installed mode skills (`lazyweb-design`, `lazyweb-quick-search`,131`lazyweb-update`) may also be called directly by the user from the slash menu.132This `/lazyweb` skill remains the entry point for hosts that show only one133downloaded skill or where the user is not sure which mode to use — there, reach134the unsurfaced modes via their MCP tool or `lazyweb_get_workflows`, never a135local file path.136137## Autorouter Check (one-time, after the request is served)138139Lazyweb has an autorouter: a small, marker-delimited routing block written140into each host agent's global instruction file so design questions route to141the right Lazyweb mode without anyone invoking a skill. This skill carries a142local fallback offer for installs that never saw the setup prompt.143144AFTER completing the user's actual request — never before, and never145interrupting unrelated work — run this check at most once per session, and146only when this skill was explicitly invoked:1471481. Skip silently unless BOTH are true:149 - `~/.lazyweb/router.manifest.json` is missing or empty150 - `grep -q "^router_declined=1" ~/.lazyweb/config` finds nothing1512. Ask the user one plain question (no host-specific tool): "Want me to152 install Lazyweb's autorouter so design questions route to the right mode153 automatically? I'd run `~/.lazyweb/bin/lazyweb-router install`, which adds154 a marked routing section to your agents' global instruction files."1553. On yes: run `~/.lazyweb/bin/lazyweb-router install --all --yes` and show156 the user what was written where. On no: run157 `~/.lazyweb/bin/lazyweb-router decline`. Either way, never ask again —158 the manifest or the decline flag silences this check and the159 once-per-session server-side offer alike.160161## Search Discipline162163These rules apply to every `lazyweb_search` call in every mode:164165- **Always run at least one real search for the user's actual screen.** Example166 or connectivity queries (like "pricing page") teach the user nothing about167 their own project — follow them immediately with the screen they are building.168- **One screen, one search.** When the user is building a whole app or page,169 run one query per screen/section (onboarding, home, paywall, settings,170 checkout…) instead of a single broad query. Pass `platform` ("mobile" or171 "desktop") and `company: "<app>"` when the user names a reference product.172- **Never repeat an identical query** — results are deterministic. To see more,173 pass `offset` (e.g. `{"query":"onboarding quiz","limit":20,"offset":20}`);174 the response's `pagination.next_offset` gives the next page.175- **Read `coverage` and `warnings` on every response and obey them.** On176 `no_matches` or `low_coverage`, use the closest result anyway, strip the177 query to its core 2-6 word UI pattern, or tell the user the pattern is not178 in the library — do not rephrase the same concept in a loop. Style179 adjectives ("dark", "minimal", "editorial") are not searchable facets yet;180 drop them from the query and judge style from the returned images.181- **On a `company_not_in_library` warning**, pick one of the suggested closest182 companies or drop the company filter — do not retry other spellings of the183 same brand.184185## Tool Rules186187**Pass `skill: "lazyweb"` on every call.** Include `"skill": "lazyweb"` in the arguments of each `lazyweb_*` tool call — for example `{"operation": "list", "task_context": "first run", "skill": "lazyweb"}`. This is optional analytics metadata Lazyweb uses to understand which skills are used; never drop or change a real argument for it.188189- Always inspect the live MCP tool list before assuming optional filters or190 backend/internal aliases are available.191- The current public gateway normally exposes `lazyweb_health`,192 `lazyweb_search`, `lazyweb_find_similar`, `lazyweb_compare_image`,193 `lazyweb_list_categories`, `lazyweb_get_workflows`, `lazyweb_get_flows`,194 `lazyweb_search_ab_tests`, and `lazyweb_paywall_cta_research`. The195 full-pipeline run tools196 `paywall_design_run` / `paywall_design_check_status` (and the parallel197 `signup_design_run` / `signup_design_check_status`) are gated behind198 env flags and may also be exposed — check the live tool list.199- All current public Lazyweb MCP tools and visible workflow skills are free,200 including `lazyweb_search_ab_tests`, `lazyweb_paywall_cta_research`,201 `paywall_design_run`, and `signup_design_run` when those run tools are202 exposed by the live schema. If a tool is missing or returns no matching203 evidence, treat that as an availability or coverage issue, not a billing gate.204- Richer internal/backend surfaces may expose `lazyweb_find_experiments`,205 `lazyweb_recent_experiments`, or206 `list_companies_by_categories`; use them only when the live tool schema shows207 them.208- Pass `high_design_bar: true` only to tools whose live schema exposes it, and209 only when the user asks for premium, stronger, high-design-bar, or210 best-designed examples.211- Screenshot-bearing tools return optimized image URLs. Supabase storage-backed URLs212 are signed for 365 days. Do not request or pass screenshot IDs, and do not213 construct storage URLs from raw paths.214- `lazyweb_search_ab_tests` is mobile-only A/B test evidence. It uses215 `category` as the industry filter and forwards `product`/`company` as target216 context. Do not use them to force an exact company match or trust a217 zero-result answer caused by an exact product/company filter.218- `lazyweb_find_similar` accepts `image_url` or `image_base64` plus `mime_type`;219 it does not take a screenshot ID.220- `lazyweb_compare_image` does real image-similarity. Always send221 `image_base64` — localhost, file paths, and web-page URLs are unreachable222 from the server. When you only have a page URL or a running local app,223 capture it yourself with your client's built-in screenshot/browser tool224 (browser screenshot, Playwright, device screenshot) and pass the capture as225 `image_base64`. Failed calls return a `how_to_fix` field — follow it instead226 of retrying the same input.227228---229> Source: [aboul3ata/lazyweb-skill](https://github.com/aboul3ata/lazyweb-skill) — distributed by [TomeVault](https://tomevault.io).230<!-- tomevault:4.0:skill_md:2026-07-02 -->