Windows desktop app · runs on your machine

Turn any reference into an editable web project.

Upload screenshots, inspect a site, describe a UI, import code, open Figma or GitHub, or use Stitch directly. Every path lands in the same local project workspace.

Installer .exe recommended. Sign in to GitHub Copilot from the app — no command-line tool needed — or bring one API key or your own endpoint.

latest Windows 10/11 · x64 Unpacks about 600 MB
The shot2code Review workspace at 1920 by 1008 in the light theme, with Chat context on the left, the imported Spoon-Knife preview in the center, and a completed local audit on the right.
Review the imported project at real CSS widths, inspect overflow and turn selected local findings into an editable Chat instruction.
  • 7 focused input tabs
  • 12 output stacks
  • Local SQLite project history
  • No telemetry

Generated code is model output: review it before running it outside the sandboxed preview. The published Windows binaries are not code-signed, so Windows SmartScreen will warn on first run — verify the SHA-256 checksum instead.

A local workspace, not a web service.

Your screenshots, the generated code and your API keys stay on the machine you installed it on.

Seven focused ways in

Upload, URL, Text, Import, Figma, GitHub and Stitch each expose the controls and safety boundaries that input needs. Multiple screenshots can become separate pages, responsive views, UI states or references; website inspection creates full-page evidence plus DESIGN.md; Import accepts fixed built Storybook metadata; repositories can open locally or run a selected-model first refinement.

Edit it like a project

The Code tab is a multi-file project tree with an editor, file tabs, Entry, Preview, Read-only and Generated badges, and a whitespace-only Format action. Current code is what you edit; a read-only Export project view shows the exact files a download will contain. Select an element in the preview and describe the change.

Size it the way you work

On wide windows, drag the divider between Chat and the preview, or between the file tree and the editor. Both are keyboard-operable separators, both remember your width across restarts, and both are clamped so neither side becomes unusable. A pane width is a view preference — resizing never creates or changes a version.

Keep your history on the device

Projects, versions, prompts and conversations live in local SQLite under %LOCALAPPDATA%\shot2code\ — outside the installation folder. History expands every version's models, options, prompts, activity and ancestry; Full history searches every saved project before opening it. Upgrades keep the database, and deleting a project removes it from this device.

Take the result with you

Export a self-contained single HTML file, or a Vite project folder for the stack you chose. Multi-file source projects are exported as they are rather than wrapped in an invented scaffold.

You still need a model provider. shot2code does not ship a model. Use Copilot, a Gemini/Anthropic/OpenAI key, or Copilot SDK BYOK. Its local Ollama preset needs no paid inference API, but Ollama, hardware and a vision-plus-tool-calling model with its own licence remain yours to install and operate.

Every input tab, captured from the current packaged interface.

Choose the path that matches the evidence you already have. The dedicated input-tab guide covers credentials, limits, privacy and output in detail.

Completed example.com design inspection at 1426 by 893 showing extracted colors, summary metrics, and actions to use screenshots plus DESIGN.md, download, or copy.
Website inspection result. Browser-computed DESIGN.md and bounded full-page responsive evidence carry actual dimensions and explicit blank/truncation state before generation.
Imported Spoon-Knife project at 1426 by 893 open in shot2code with editable Chat suggestions, Preview controls, History, and the desktop page preview.
Public repository opened locally. Safe source files and bounded image assets enter the normal Preview, Code, Review, Chat, History and export workflow.
shot2code Built Storybook import mode at 1426 by 893 showing built-folder, selected-JSON, ZIP, and public-HTTPS sources plus the fixed JSON-only safety boundary.
Built Storybook metadata. Add compact component-library context from fixed JSON paths without executing stories, bundles, addons, loaders, play functions or iframe.html.

After an input becomes a project

Current packaged-app captures of Review, permissioned integrations, provider-neutral tools, Chat inventory and local History. Select any screenshot to open its original pixels.

shot2code Review workspace at 1920 by 1008 in the light theme, with Chat context, the Spoon-Knife preview, and a completed local audit with runtime coverage.
Responsive Review · 1920×1008. The imported project renders at real labelled widths while the completed source/runtime audit stays bound to the current version, option, code and viewport set.
shot2code MCP Servers settings at 1440 by 900 in the light theme, showing a disabled and untrusted Demo component library draft with write tools off and safety guidance visible.
MCP permissions · 1440×900. Registry/manual entries start inert, need Enabled plus Trusted before launch, and remain read-only until write tools are separately allowed.
shot2code Settings at 1440 by 900 in the dark theme, showing Copilot SDK BYOK switched off and described as separate from direct provider keys.
Copilot SDK BYOK · 1440×900. The optional connection is additive, carries its own endpoint and credential, and leaves direct OpenAI, Anthropic, Gemini and Replicate settings untouched.
shot2code Review at 900 by 1024, with compact navigation, responsive Review controls, a completed local audit, and warning findings reflowed into one column.
Compact Review · 900×1024. The shipped desktop minimum keeps Preview, Chat, History, Review and Code identifiable while the audit controls and findings stack without page-level horizontal overflow.
shot2code Settings at 1440 by 900 showing the local Ollama preset inside the additive Copilot SDK BYOK card with install, hardware, model capability, and licence caveats.
Local Ollama preset · 1440×900. The localhost OpenAI-compatible path is additive and does not reroute native OpenAI, Anthropic, Gemini or Copilot selections.
shot2code Settings at 1440 by 900 in the dark theme showing separately consented bounded page reading and its public-only URL, redirect, byte, text, call, and timeout limits.
Bounded page reading · 1440×900. Search consent never implies a page read; the shot2code-owned tool caps public URLs, redirects, bytes, text, calls and time while Copilot's unbounded built-in remains blocked.
shot2code Settings at 1440 by 900 showing the Iconify design add-on, fixed origin, SVG sanitization, permissive licence policy, provenance, and trademark warning.
Localized Iconify assets · 1440×900. SVGs come from one fixed origin, are sanitized and stored locally, and carry source/licence provenance plus an explicit trademark boundary.
Tools available to this Chat at 1440 by 900 in shot2code, showing editing, preview, web, image, Iconify, MCP, and Agent Skills readiness without enabling paid, external, trusted, or write-capable tools implicitly.
Tools available to this Chat · 1440×900. The inventory reports readiness, cost, trust and write scope honestly; it is not a master permission switch.
shot2code Full history at 1440 by 900 showing searchable local projects and a read-only project version summary before Open project is selected.
Cross-project Full history · 1440×900. Search local projects and inspect their complete saved version lineage before choosing to open one.
shot2code project History at 1440 by 900 showing the saved synthetic model identity, selected create version, and a Back to chat action beside the project preview.
Expanded project History · 1440×900. Saved model identity, option, status and ancestry stay attached to the version that produced the current project.

How any input becomes a project

An agent loop with real tools, running from your machine against the provider you configured.

  1. 1

    Give it a reference

    Choose Upload, URL, Text, Import, Figma, GitHub or Stitch. Pick the output stack where one applies, add an optional first instruction, and select models only when the path needs generation or conversion.

  2. 2

    It writes the files

    The model calls tools — create a file, edit a file, extract assets, render a screenshot preview — and shot2code executes them locally and feeds the results back.

  3. 3

    Compare and refine

    One option is generated per selected model, in parallel, so you pick the closest one. Then say what to change, or select an element in the preview and describe the edit. Chat keeps the whole branch — your prompts, the attachments, the model identity and the assistant's own answers.

  4. 4

    Keep or export it

    Every version is saved locally and reachable from History or Recent projects. Export a single HTML file or a Vite project folder when you are happy.

Generation streams over a local WebSocket from a bundled FastAPI backend; the desktop shell starts it on a free port. The only outbound traffic is to the model provider you chose, the update check, and the integrations you switch on and use — an MCP server you trusted, a Figma, Stitch or GitHub import, public-site inspection, opt-in web or free-image search, an image provider, feedback you explicitly submit, or anything you explicitly share.

What the app can do

What the app does today — and which capabilities need an extra key.

Input tabs
Seven dedicated paths: Upload, URL, Text, Import, Figma, GitHub and Stitch. Video/recording lives under Upload; the input-tab guide documents each path's requirements, limits and output.
Design sources
Figma can preview REST-rendered frames before a model call and reuse them for generation. Built Storybook reads only fixed metadata JSON from files/folder/ZIP/public HTTPS. Stitch-only opens localized output without another provider. URL inspection scrolls bounded lazy content and returns full-page responsive evidence with real dimensions and blank/truncation state.
Model choice
Pick models from GitHub Copilot, OpenAI, Anthropic and Google Gemini in Settings or beside the composer. One option per selected model; tick nothing to leave it automatic.
Your own endpoint
An optional Copilot SDK BYOK connection — OpenAI-compatible, Azure OpenAI or Anthropic — with no Copilot subscription. The local Ollama preset fills http://localhost:11434/v1; local inference needs no paid API, but Ollama, hardware and a separately licensed vision-plus-tool-calling model remain yours.
Signing in
The desktop app runs its own GitHub OAuth device flow: a one-time code, your browser, and no command-line tool to install. It uses a public client id and no client secret, and the token is encrypted by the operating system key store. Disconnecting clears what this app holds and leaves a gh or Copilot CLI session signed in.
Provider checks
Test OpenAI, Anthropic, Gemini and Replicate individually with one minimal request each, and read the answer as Ready, Out of credit, Key rejected, Rate limited, Access denied, Model unavailable, a configuration problem or unreachable. A test may use a little quota.
MCP servers
Up to eight servers over stdio, HTTP or SSE, added by hand or from an in-app browser for the official MCP Registry. Installing from the registry creates a disabled, untrusted draft to review, as does the featured Google Stitch entry. Each needs to be enabled and trusted before it starts, stays read-only until write tools are explicitly allowed, and is offered to GitHub Copilot and Copilot SDK BYOK options only.
Skills and research
Skills stay disabled/inert and reach Copilot runtimes only. Every runtime can separately opt into bounded Tavily/Exa snippets, query-free public-page text through read_web_page, CC0/Public Domain Mark Openverse photos, and fixed-origin sanitized Iconify SVGs. Built-in whole-page web_fetch remains blocked.
Chat Tools
The composer inventories project editing, Chromium preview health, research consent, generated-image readiness/provider billing, localized icons, active MCP server write scope and enabled Skills. The inventory enables nothing; every external, paid, trusted or write-capable path keeps its own Settings permission.
Editing
Multi-file tree, file tabs, a collapsible explorer, select-and-edit from the preview, and a formatter that only ever changes whitespace and refuses component source. Current code is editable; a read-only Export project view lists the exact files and assets a download will contain.
Review
Two to four actual widths in sandboxed frames (1440, 768 and 390 by default; custom 320–1920) combine deterministic source checks with bounded per-frame runtime evidence. Findings have categories and provenance; filters support select-visible without dropping hidden selections; failed frames are isolated; health reports healthy/stale/partial coverage; schema-v2 JSON records viewport evidence. It is not WCAG certification.
A second opinion
An optional AI review runs on the model that option actually ran on, with no tools, MCP servers, skills or web search attached; it is a real provider request and may use quota, and the local findings stay authoritative. A Design Inspector extracts colours, variables, typography, spacing, radii, shadows and motion, and exports DESIGN.md, SKILL.md and a palette image.
Layout
On wide windows, drag or keyboard-move the dividers between Chat and the workspace, and between the file tree and the editor. Pane widths, Preview/Code/Review state, preview source/zoom, and native window bounds persist without changing a project version. Coalesced resize handling prevents narrow-window preview flicker.
Startup
Core routes come up first; heavy features load on use and optional probes run in the background. The shell requires genuine health, then inspects the top-level renderer: one blank load is reloaded once, and a second blank load gets a static recovery screen while local projects remain stored.
Menus, help and feedback
A native File, Edit, View, Window and Help menu drives the same commands as the keyboard. Ctrl+/ opens guides and Support; Help can open diagnostics and submit feedback through an authenticated GitHub CLI or safe copy/download/browser fallbacks. Private app data is never attached automatically.
Project history
Local SQLite keeps projects and every version/option/model/prompt/response/activity/status/timing/error plus retry/branch ancestry. Current-project History expands those records; Full history searches every local project before opening it. The database sits outside the install folder, so upgrades keep it.
Import and GitHub
Import accepts HTML/source plus fixed built Storybook JSON without executing stories, bundles or iframes. GitHub uses the same never-execute scanner; blank refinement opens locally, while a non-empty one uses the selected edit models/design system and preserves the detected stack.
Preview
A derived opaque-origin sandbox with restrictive CSP. At 100% the fixed-width canvas is centred in a neutral frame. Agent screenshot preview returns full-page desktop/mobile images plus bounded body/element counts, sanitized browser errors and nearly-blank metadata. Stack preview renders controlled Vite HTML/React/Preact without package scripts or project configuration.
Assets and images
Provider-billed generation reports one truthful result per prompt and trips a per-run circuit breaker after non-retryable failures. Openverse remains the no-key CC0/Public Domain Mark photo path; ordinary web images are excluded for reuse-rights reasons. Iconify SVGs are SPDX-filtered, sanitized, localized and provenance-tagged.

✓ Keyboard-first

Ctrl+/ opens the Help centre, which carries the full shortcut reference. Ctrl+1–4 switch Preview, Code, Chat and History; Ctrl+3 again collapses the chat panel on wide windows, and Ctrl+Alt+C brings it back. Project actions use Ctrl+Alt combinations — N new, I import, U upload, S settings, E export. The same commands sit in the native File, View and Help menus, greyed out until a project makes them possible. Pane dividers take arrow keys, Shift for larger steps, Home/End and Enter to reset. In the desktop app, Ctrl+= and Ctrl+- zoom in fixed steps between 50% and 300%, and Ctrl+0 resets.

✓ Sharing that asks first

CodePen is offered only when the selected stack can honestly run in a browser-only Pen, and it always asks before code leaves the device. For build-dependent projects, download the project folder instead.

✓ Honest fallbacks

When export cannot find a valid root build command, it keeps every source file and adds a Safe fallback note rather than inventing a scaffold that looks plausible and breaks later.

✓ It starts in seconds

Only the core routes have to be ready before the window opens — generation, evaluation and project tooling load on first use, and the Chromium and Copilot checks run in the background. The shell demands a real health response rather than any reply, gives up after 90 seconds instead of hanging, and logs how long readiness took.

✓ A workspace you can resize

Drag the divider between Chat and the preview, or between the file tree and the editor. Arrow keys move it, Shift moves it further, Home and End jump to the limits, Enter resets and Escape cancels a drag. Widths persist, clamp to the window, and never touch a project's versions.

✓ Help, and the log, in the app

Ctrl+/ opens a Help centre — Get started, Guides, Support and the full shortcut reference — linking the published guides rather than a private copy. In the desktop app it also opens the backend log folder, which is the first thing to attach to a bug report.

Twelve output stacks

Each one has an explicit single-HTML and project-folder export strategy, so what you download actually builds.

  • HTML + Tailwind
  • HTML + CSS
  • React + Tailwind
  • Vue + Tailwind
  • Bootstrap
  • Ionic + Tailwind
  • Alpine.js + Tailwind
  • Preact + Tailwind
  • Tailwind + daisyUI
  • Bulma
  • Material 3
  • htmx + Tailwind

HTML and CDN projects export as a Vite project with a deterministic static copy, so inline modules and import maps are not silently reordered. React and Preact use Vite's framework build path when the generated source is safely transformable, and a documented Vite HTML fallback when it is not.

Bring your own model

One provider is enough — and whichever you bring, you choose which of its models actually run. Keys are stored on your device and sent only to the provider they belong to.

GitHub Copilot

The easiest option, because there is no API key to manage and nothing to install: Sign in with GitHub in Settings runs the app's own GitHub OAuth device flow — a one-time code, your browser, a public client id and no client secret, and a token encrypted by the operating system key store. Running gh auth login (or copilot) still works, and disconnecting inside shot2code leaves those CLI sessions signed in. Needs an active Copilot subscription, and reaches Claude, GPT, Gemini and Grok models through it. The model list is discovered live from the signed-in account, so it is your plan's real entitlement.

Provider guide

Gemini, Anthropic, OpenAI

Paste an API key into Settings. It is kept on this device and sent with the generation request to that provider only. Each of these providers has a maintained, validated model list, so picking models for them contacts nobody. Gemini additionally powers video input and asset extraction.

Key setup

Your own endpoint (BYOK)

An optional Copilot SDK BYOK connection reaches an OpenAI-compatible, Azure OpenAI or Anthropic endpoint of your own. No Copilot subscription is required. It uses its own API key or bearer token; direct OpenAI/Anthropic keys are never borrowed for it, only an OpenAI-compatible endpoint on localhost may run without one, and there is no Gemini equivalent. Configure local Ollama fills http://localhost:11434/v1. shot2code does not install Ollama or a model: local inference needs no paid API, but uses your hardware and a separately licensed model with image input and tool calling. Native providers are never rerouted.

BYOK guide

Image providers (optional)

Choose Replicate, Cloudflare Workers AI, or an OpenAI-compatible image endpoint in Settings. Credentials stay independent from the model providers. Replicate remains the default-compatible choice and the only background-removal provider; editing appears only when the provider really supports it.

What needs which key

Choosing models is part of Settings, not a Copilot-only extra. Settings → Models — and the compact picker beside the composer — group every model you can currently use under GitHub Copilot, OpenAI, Anthropic, Google Gemini and, when you configure one, Copilot SDK (BYOK). Tick as many as you like, across providers, and each run produces one option per selected model, up to 4 for a first generation and 2 for an update or a video; tick nothing and the choice stays automatic. Models that cannot read the input you gave — video in particular — are filtered out rather than offered and failed, deprecated models stay hidden unless you ask for them or already picked one, and a saved model that can no longer run is reported and skipped instead of silently deleted. A provider only appears once the app can actually see a credential for it.

A BYOK option is its own selection, not a redirect. Each model your endpoint can serve is listed separately as sdk-byok/<provider>/<model>, so you can tick a model and its BYOK counterpart and get both results from one generation — at the same reasoning effort, side by side. The four native groups are untouched by it: each still needs its own key or sign-in, and a native pick always runs on its native provider. History records the identity each option actually ran as, so a retry repeats the same runtime. An incomplete or switched-off connection is reported as a notice and never blocks a direct generation.

MCP servers extend the SDK runtimes only. Up to eight servers over stdio, HTTP or SSE, added by hand or found through the in-app browser for the official MCP Registry — where installing an entry creates a disabled, untrusted draft for you to review, as does the featured Google Stitch server. Figma MCP endpoints are filtered because Figma restricts them to catalog-listed clients. A server must be enabled and explicitly trusted, stays read-only until write tools are allowed, a local server is spawned as an argument vector rather than through a shell, and a remote one must use https:// unless it is on localhost. Its tools reach Copilot/BYOK options only; a native OpenAI, Anthropic or Gemini option never sees them.

Skills remain SDK-only; canonical research does not. Search snippets, separately consented bounded page reading, Openverse photos and Iconify icons reach every runtime. The Chat Tools inventory reports their state, generated-image billing/readiness, MCP write scope and enabled Skills without turning anything on. Iconify's public API is currently keyless but has no fixed quota/SLA; built-in web_fetch stays blocked because its whole result cannot be inspected before the model receives it.

Recently improved

The latest stable release closes the gaps around local models, bounded research, design-system inputs, complete history, runtime Review and fail-closed recovery.

✓ Local Ollama and bounded page reading

The existing BYOK card can configure http://localhost:11434/v1. Local inference needs no paid API, but Ollama, hardware and a separately licensed vision-plus-tool-calling model remain yours. A separate read_web_page permission reads public query-free pages inside byte/text/call budgets; runtime-owned web_fetch stays blocked.

✓ Full history and explicit GitHub refinement

Full history searches every local project and expands models, options, prompts, responses, activity, statuses and retry/branch ancestry. The GitHub tab now makes local open versus selected-model first refinement explicit, includes a design-system choice, and preserves the detected repository stack.

✓ Storybook, Figma and full-page URL evidence

Built Storybook import reads only fixed JSON metadata from local files/folder/ZIP/public HTTPS and never executes stories, bundles or iframes. Figma frames can be previewed before the model call and reused. URL inspection scrolls bounded lazy content and reports real dimensions plus blank/truncation state, capped at 40,000px and 36 million pixels.

✓ Honest Chat Tools, photos and icons

The Chat inventory reports consent, generated-image billing/readiness, MCP write scope and enabled Skills without enabling anything. Openverse remains the no-key CC0/Public Domain Mark photo path because general web-image results grant no reuse right. Iconify SVGs are fixed-origin, SPDX-filtered, sanitized, localized and provenance-tagged; its currently-keyless public access has no fixed quota or SLA.

✓ Review health and preview diagnostics

Review combines source findings with bounded per-frame runtime evidence, categories, filtered select-all, isolated frame failures and explicit healthy/stale/partial coverage. Schema-v2 reports are not WCAG certification. Agent screenshot preview now returns nearly-blank state plus bounded console/page diagnostics.

✓ Fail-closed provider and renderer recovery

Non-retryable image-provider failures trip a per-generation circuit breaker instead of repeating paid calls. At the application level, a truly blank renderer is reloaded once and then replaced with a static recovery screen while local project data remains intact.

Every version, its notes and all its files are on the releases page. The full history lives in the changelog.

Download

Windows 10/11 x64. Each build carries its own Python backend and a headless Chromium, so there is nothing else to install. latest is the current published build; every version this hub has published — with the files it actually carries — is on the releases page.

Installer (MSI)

Managed

Per-machine deployment. Self-update is disabled by design; upgrades stay with the administrator.

Download .msi

Portable

Unzip anywhere and run shot2code.exe — nothing to install, and easy to remove.

Download .zip

Checksums

Verify

SHA-256 hashes for every file in this release. The binaries are unsigned, so this is how you check what you downloaded.

SHA256SUMS

Compare the hash of the file you downloaded against the published list:

Get-FileHash .\shot2code-<version>-x64.exe -Algorithm SHA256

Only the per-user .exe updates itself: Settings shows the running version, the update state and Restart & install once a download is ready. Before anything is replaced, the installed backend is stopped and that shutdown is verified — by the app, and again by the installer itself, so an update that starts from an older build is protected too. The installer now stops the installed backend itself before replacing anything, matching processes by path under resources\backend, never by name, and if it cannot confirm they are gone the install stops rather than overwriting a running app. MSI upgrades stay with the administrator and portable builds do not update.

These builds are not code-signed. Windows will show “Windows protected your PC” the first time you run the installer, and downloaded files carry the mark of the web. That warning is expected and is not evidence that the download is good or bad — verify the SHA-256 hash first, then choose More info → Run anyway, or right-click the file → Properties → Unblock → Apply. If a hash does not match, stop and report it.

What leaves your machine

Only what you ask for, and every route is yours to control.

Local by default

Screenshots, generated code and Full history stay on the device. A generation goes only to the selected provider. Figma/Stitch/private-repository credentials remain capture-only. Local Ollama uses your own machine. Validating BYOK/MCP, opening Chat Tools and running source/runtime Review contact nothing; page/photo/icon research leaves the device only after its separate opt-in and a model call.

No telemetry

There is no analytics SDK. The remaining background call is the per-user update check. Everything else is an action you take: registry/design/Storybook import, AI review, web search, bounded page reading, Openverse/Iconify lookup, provider-billed image generation or confirmed CodePen sharing.

Untrusted input, treated as such

Imported projects/GitHub archives are parsed, never executed; Built Storybook reads only fixed JSON and never stories, bundles or iframes. Public pages, Openverse and Iconify pass public-address/type/size/sanitization bounds and remain untrusted evidence. Previews use an opaque origin plus restrictive CSP. MCP needs enablement and trust, writes need another switch, and Skill scripts cannot run.

Documentation

Everything needed to install it, use it, work out what went wrong, and see what ships inside it.