Gradient mesh generator — 4-12 control points with bilinear blend, output as SVG, PNG, CSS multi-radial-gradients fallback for older browsers.
- Runs locally
- Category Generator
- Best for Starting from a blank page without committing to the first result.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450" width="800" height="450"><defs><radialGradient id="mg0" cx="0.0" cy="0.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#8b5cf6" stop-opacity="0.95"/><stop offset="100%" stop-color="#8b5cf6" stop-opacity="0"/></radialGradient><radialGradient id="mg1" cx="800.0" cy="0.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#06e6d7" stop-opacity="0.95"/><stop offset="100%" stop-color="#06e6d7" stop-opacity="0"/></radialGradient><radialGradient id="mg2" cx="0.0" cy="450.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#ff4dd2" stop-opacity="0.95"/><stop offset="100%" stop-color="#ff4dd2" stop-opacity="0"/></radialGradient><radialGradient id="mg3" cx="800.0" cy="450.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#ffe27a" stop-opacity="0.95"/><stop offset="100%" stop-color="#ffe27a" stop-opacity="0"/></radialGradient><radialGradient id="mg4" cx="264.0" cy="225.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#a78bfa" stop-opacity="0.95"/><stop offset="100%" stop-color="#a78bfa" stop-opacity="0"/></radialGradient><radialGradient id="mg5" cx="528.0" cy="225.0" r="440.0" gradientUnits="userSpaceOnUse"><stop offset="0%" stop-color="#22d3ee" stop-opacity="0.95"/><stop offset="100%" stop-color="#22d3ee" stop-opacity="0"/></radialGradient><filter id="b"><feGaussianBlur stdDeviation="36.0"/></filter></defs><g filter="url(#b)"><rect width="800" height="450" fill="#8b5cf6"/><rect width="800" height="450" fill="url(#mg0)"/><rect width="800" height="450" fill="url(#mg1)"/><rect width="800" height="450" fill="url(#mg2)"/><rect width="800" height="450" fill="url(#mg3)"/><rect width="800" height="450" fill="url(#mg4)"/><rect width="800" height="450" fill="url(#mg5)"/></g></svg>
What this tool does
A real mesh gradient generator — not just three radials stacked and called a "mesh". You start with 6 control points (4 corners + 2 mid), drag any of them around the canvas with the mouse or finger, add up to 12 in total, and the background recomputes in real time using a true bilinear interpolation between adjacent points. Two render modes: SVG (multiple soft-edged radial-gradient blobs, ~15 KB output, opens cleanly in Figma) and Canvas (per-pixel bilinear mesh, slower but pixel-perfect, exports as 2x retina PNG up to 3200×2400). 20 presets cover the looks teams reach for every day — Aurora, Sunset, Ocean, Cyberpunk, Morandi pastel, Vibrant, Soft, Dark — plus four in-house brand palettes. The "Randomize" button samples six colors in the OKLCH color space (perceptually uniform, no muddy mixes) so every roll feels brand-safe instead of "color picker noise". Canvas ratio switches between 16:9 (hero), 1:1 (social), 9:16 (mobile/Story), and 21:9 (ultrawide banner). Exports: SVG single file, PNG 2x, CSS multi `radial-gradient` (fallback for browsers without SVG mesh support), and a Figma-importable JSON describing the control points. 100% client-side, no upload, no analytics call carrying your design.
Tool details
- Input
- Files + Numbers
- The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
- Output
- Live result + Copy + Download
- The result area focuses on usable output, with copy, download, or preview actions when supported.
- Privacy
- Browser-side processing
- The main tool logic does not call an external API, so inputs normally stay in the current tab.
- Save / share
- Shareable URL state
- Key settings are encoded in the URL so another person can reopen the same setup.
- Performance budget
- Initial JS <= 28 KB
- No WASM budget is declared, keeping the tool quick to open on mobile.
- Best fit
- Generator · Designer
- Category and role tags drive related tools, internal links, and quick fit checks.
How to use
-
1. Input
Paste or drop your content into the tool panel.
-
2. Process
Click the button. All processing is local in your browser.
-
3. Copy / Download
Copy the result or download to disk in one click.
How Gradient Mesh Generator fits into your work
Use it to get a strong first draft, starter asset, or structured output that you can edit before publishing.
Generation jobs
- Starting from a blank page without committing to the first result.
- Creating repeatable drafts, names, templates, or placeholder assets.
- Exploring options before choosing the one that fits the job.
Generation checks
- Review generated output before it reaches a customer, page, or document.
- Change defaults when you need a specific brand voice, format, or audience.
- Keep only the parts that match the real task.
Good next steps
These links move the current task into a more complete workflow.
- 1 SVG Wave Generator Generate smooth SVG wave dividers for landing pages — adjustable waves, amplitude, layers, seed — flip top/bottom — export SVG / CSS — browser-only Open
- 2 CSS Gradient Generator Visual CSS gradient builder — linear, radial, conic with multi-stop colors, live preview, copy CSS, PNG export. Open
- 3 Glassmorphism Generator Glassmorphism CSS generator — backdrop-filter blur + transparency + border, live preview with 8 background presets, copy CSS/Tailwind/SwiftUI. Open
Real-world use cases
Build a SaaS landing-page hero in two minutes flat
Your landing page needs the Stripe / Linear / Vercel "soft glowing mesh" look. Open the tool, click the Aurora preset, drag the top-left point toward the center to push the purple into the headline area, drag the bottom-right point off-canvas to let the teal bleed off the edge. Switch to Canvas mode, export PNG at 2x, drop it behind your hero block. From "no design asset" to shipped background in under 120 seconds, no Figma, no Photoshop.
Generate 20 unique OG / Twitter card backgrounds in one sitting
You're shipping 20 blog posts and you want each OG image to feel related but not identical. Switch the canvas ratio to 1.91:1 (close to Twitter's 1200×630), hit Randomize 20 times, screenshot / PNG-export the ones you like. Because Randomize samples in OKLCH, every roll is brand-safe instead of "neon spaghetti", so you keep 15 out of 20 instead of 3 out of 20.
Hand a brand-aligned mesh to a junior designer to iterate on
Your brand colors are #ff4dd2 / #06e6d7 / #8b5cf6. Set those as three of the six control points, randomize the other three within a narrow OKLCH band around them, export the SVG, drop into the shared Figma library. The junior designer now has a starting mesh that's already on-brand — they tweak positions instead of fighting "is this purple on-brand?" decisions.
Replace a stock photo on an internal dashboard
Your dashboard's empty state shipped with a stock photo that looked dated by month two. Build a soft Morandi-pastel mesh with the corresponding preset, export the SVG, drop it in as a decorative background behind the "No data yet" copy. The page feels intentional again without commissioning illustration.
Test a mesh against text legibility before committing
You want body text to sit on top of the mesh, not just decorative headings. Drag the blur slider to 80, pick a Soft preset to flatten the color variance, layer a semi-transparent dark panel behind the copy in your component. Now you can run a real WCAG contrast check against the panel color instead of pretending the raw mesh meets contrast (it doesn't, and the tool's FAQ is honest about that).
Produce a vertical 9:16 mesh for a TikTok / Reels backdrop
Your creator team needs a "soft glow" backdrop for a phone-shot tutorial. Switch ratio to 9:16, pick the Sunset preset, drag the warm point upward so the highlight is behind the speaker's head, export PNG at 2x (1080×1920). The vertical export is the same mesh, not a re-tuned variant, so you keep the brand feel across horizontal hero + vertical short-form.
Common pitfalls
Adding all 12 control points right away and ending up with a muddy "everything blends into brown" mess. Start with 6, add a 7th or 8th only when a specific area needs more depth.
Picking randomize and immediately exporting without checking the canvas ratio. The randomize button does not change ratio — if you wanted 9:16 you still have a 16:9 PNG. Switch ratio first, then randomize.
Using SVG mode and expecting the result to look identical to Canvas mode. SVG layers radials additively; Canvas does true bilinear interpolation. For "this exact pixel-perfect mesh", export Canvas PNG, not SVG.
Putting body copy directly on the mesh and being surprised that WCAG contrast fails. Mesh gradients are decorative. Add a semi-transparent text panel or pick a Soft preset with high blur for legibility.
Hand-picking hex codes for each control point in random RGB hex without color theory. The Randomize button samples in OKLCH on purpose — use it as the starting point, then nudge.
Exporting the CSS multi-radial-gradient fallback and assuming it matches the SVG output. It is the lower-fidelity fallback for environments where SVG-as-background is not an option, not a replacement.
Privacy
Everything happens in your browser tab. Control point positions, colors, the active preset, render mode, canvas ratio, and blur radius all ride in the URL so a share link reproduces the exact mesh — nothing is uploaded, no analytics call carries your design, no server sees your color choices. PNG export goes through canvas.toBlob locally; SVG export is a string built in-memory. The "Randomize" OKLCH sampler is a 30-line pure function, not an API call. Close the tab and there is no record of your design anywhere.
FAQ
Tool combos
Folks in your role tend to reach for these alongside this tool.
- Aspect Ratio Calculator Calculate aspect ratio — fix any 1 of [width, height, ratio], get the other two.
- Base64 Encoder & Decoder Encode or decode Base64 — text, files, and Data URLs. Runs entirely in your browser.
- Base64 Image Converter Image ⇄ Base64 — drag-drop PNG/JPG/WebP/SVG, get data URI for CSS / HTML / Markdown.
- Base64 to File Converter Paste raw Base64 or a data URL, decode it locally, inspect bytes, and download the reconstructed file.