← Open Toonforge studio

From your photo
to your next print.

Toonforge is a free, open-source photo-to-cartoon and print studio. Turn a JPG, PNG or WebP into simplified comic artwork, compare the result and export a PNG or a browser print sheet. Photos are processed on your device with classical image filters.

Make a comic print, zine or handout

  1. Open the studio and choose a photo, or explore the labeled Manarola sample. Personal images are never uploaded.
  2. Choose Soft print for gentle color, Graphic novel for stronger outlines, or Mono ink for grayscale.
  3. Adjust texture, outline strength and tone levels. Drag the comparison divider or select Original and Result. Inspect faces, thin lines and small text.
  4. Download the PNG or choose Print a sheet. The browser’s print dialog controls paper size and scaling.

Three useful starting points

For a classroom handout, try “simpler handout with gentle outlines”. For a zine, try “bold comic with fewer colors”. For a quiet memory print, try “monochrome with softer outlines”. These local commands map supported words to filter settings without an AI service.

Keep a look for next time

Give your settings a name and save them to your recipe shelf. Up to twelve recipes live in your browser’s local storage. A recipe contains style, texture, outlines and tone levels. It contains no image or API key. Open another photo and apply a saved recipe to get a consistent starting look.

Copy a settings link to use another browser or share a look. Anyone with the link can read its recipe name and settings. The recipient chooses their own photo. Clearing site data removes your shelf; preserve important looks as links.

What the image pipeline actually does

A dedicated Web Worker runs four alternating horizontal and vertical smoothing passes. Neighboring pixels contribute according to distance, color difference and opacity. This is a separable range-weighted filter, not an exact two-dimensional bilateral filter.

Per-channel quantization reduces tonal detail to 3–12 levels. This number is not the total number of output colors: outlines introduce intermediate shades. A Sobel gradient estimates boundaries; a smooth threshold darkens them according to outline strength. Alpha is preserved, and transparent neighbors do not bleed color into visible ones.

The analysis panel measures an alpha-weighted, 32-bin luminance histogram, luminance standard deviation and the fraction of adjacent visible-pixel pairs differing by more than 24 luminance units. Its suggestions are explicit heuristics. It does not recognize people, segment objects or infer meaning.

Read the controlled evaluation and negative findings. Two synthetic fixtures test texture suppression and boundary retention against posterization and box smoothing. These are engineering checks, not evidence of artistic preference, printer savings or real user adoption.

Can a text-only model edit an image?

Indirectly, within the available filters. A text model can translate “softer lines and fewer colors” into a small JSON settings plan. Toonforge validates that plan, shows it to you, and applies the filters locally when you choose Apply. The model never sees the photo and never generates pixels. Removing an object, replacing a background or inventing visual content requires other computer-vision or image-generation capabilities that this app does not supply.

Connect OmniRoute or another compatible router

Expand Connect a text model. Enter an API base URL ending in your provider’s API prefix, a text model ID and your own key. For example, a base ending in /v1 becomes /v1/chat/completions. Verify the exact URL and model with your router. HTTPS is required except for localhost.

The provider must support a chat-completions-compatible API and browser CORS for this site’s origin. Toonforge cannot bypass CORS or serve as a secret proxy on static hosting. Keep using the free local controls if the provider does not allow browser requests. No provider integration has been verified with a real paid key in this release.

Clicking Use my text model sends one bounded instruction, current settings and three numeric image measurements directly to the URL you entered. The provider also receives the API key in an authorization header and ordinary connection metadata. The prompt is limited to 600 characters and output to 220 tokens, with a 20-second timeout and no automatic retries. Provider context usage includes the system instruction and settings; billing and retention follow the provider’s policy.

The key remains in this tab’s form memory. It is not put into local storage, recipe links, logs or the repository. Use Clear connection details to remove it. Only validated numeric settings and supported style IDs are accepted; model text is displayed as plain text and never executed.

Use the same filters through MCP

The repository includes an optional local stdio MCP server for agent workflows. It exposes list_styles, analyze_png, plan_edit and render_png. Run it from a cloned checkout with npm run mcp -- --root /path/to/images. The client must launch it in that checkout, with Node and dependencies installed.

It reads PNG files within the chosen working root, checks dimensions before decoding, and writes new PNG files without overwriting existing ones. It returns settings, measurements and output paths rather than image bytes. PNG input is limited to 20 MiB, four million pixels and 8,192 pixels per side. This is a locally launched tool, not a public remote MCP endpoint. Only use it with a trusted client; the hosting page cannot access your filesystem.

MCP setup, example calls and file limits

Practical limits and privacy

The browser accepts JPG, PNG and WebP up to 20 MiB, 40 million source pixels and 20,000 pixels per side. It downsamples to at most 1.5 million working pixels, preserving aspect ratio without upscaling. This is intended for small prints and web artwork, not large posters. Browser decoding and memory can still fail.

Image darkness is a screen measurement, not measured ink consumption. Filtering can remove hair, small text and low-contrast details. It does not anonymize a person. Compare the output before sharing it. No trained image model or generative image service is included.

Without the optional text connection, there are no image uploads, analytics or accounts. The host still sees ordinary page requests. Your active photo lives in tab memory and disappears on reload. Public assets are cached for offline use after a successful first visit; private browsing and storage eviction may prevent offline availability. Text-model requests require network access.

The sample is by Green Liu under the Unsplash License. Manrope is bundled under the SIL Open Font License. Application code is MIT licensed. Attribution and sources.

Make something in the studio →