Skip to main content

Blob Shape Generator

Generate organic blob shapes as SVG.

Reviewed by · Last reviewed

6 pts
50%
400px
SVG
<svg viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
  <path d="M 313.01,137.77 C 353.24,239.91 307.85,287.64 266.38,314.97 C 224.91,342.30 143.68,383.14 105.33,363.98 C 66.97,344.82 28.33,240.97 36.24,200.00 C 44.14,159.03 113.49,138.93 152.76,118.18 C 192.03,97.44 238.30,61.90 271.86,75.53 C 305.43,89.17 355.07,160.09 354.15,200.00 Z" fill="#6366f1" />
</svg>

How to Use the Blob Shape Generator

  1. Set the complexity slider (3-10). This is the number of control points placed around an invisible circle; more points produce a richer outline, fewer points a cleaner silhouette.
  2. Set the randomness slider. At 0, every point lies exactly on the circle and you get a regular polygon after smoothing. At maximum, each point can be pushed up to ~40% of the radius inward or outward.
  3. Pick a fill color, or toggle gradient mode to linearly blend between two stops.
  4. Hit Randomize to reseed the randomness - the complexity stays the same, but each point gets a fresh offset.
  5. Export as SVG (for inline use or a file), CSS background-image (as a data URI), or PNG via the download button.

How the Blob Is Built

The generator places N control points at equal angular intervals around the unit circle (2π/N apart), then perturbs each point\'s radial distance by a random factor in the range [1 - r, 1 + r] where r is the randomness slider value. Each point becomes an anchor in an SVG path. To produce a smooth organic curve rather than a jagged polygon, consecutive anchors are joined with cubic Bezier segments whose tangent vectors are computed using the Catmull-Rom-to-Bezier conversion formula - given four consecutive anchors P[i-1], P[i], P[i+1], P[i+2], the segment from P[i] to P[i+1] has control points at P[i] + (P[i+1]-P[i-1])/6 and P[i+1] - (P[i+2]-P[i])/6. The factor 1/6 is the standard Catmull-Rom tension that produces C1-continuous curves passing exactly through every anchor. The path is then closed and filled, and the randomness seed is stored in component state so Randomize re-rolls only the offsets.

Where Blobs Show Up in Real Design

  • SaaS marketing hero backgrounds, where soft organic shapes hint at warmth without being literal illustrations.
  • Avatar containers on profile pages, as a visual escape from the standard circle or rounded square.
  • Decorative corners around feature sections and pricing tables.
  • Illustrations of abstract concepts - "network", "community", "growth" - where a geometric shape would feel too clinical.
  • Social graphics and OG cards, because the blob silhouette reads well at thumbnail size and differentiates from competitors who use stock photography.

Pitfalls to Watch For

First, seeded randomness determinism: once you hit Randomize again the previous shape is gone, so copy the SVG immediately if you like it. Second, self-intersection at high randomness: pushing inward aggressively can cross adjacent tangents and produce a visible pinch or loop; the tool clamps to prevent most cases, but regenerate or reduce randomness if you see a self-crossing. Third, viewBox padding: blobs that reach outward can get clipped at the viewBox corners. Fourth, accessibility: a decorative blob must carry aria-hidden="true" and an empty <title> so screen readers skip it - add these at integration time.

About Organic Curves and Path Math

SVG 2 (W3C Candidate Recommendation 2018) defines the cubic Bezier command C x1 y1, x2 y2, x y which draws a curve from the current position to (x, y) influenced by control points (x1, y1) and (x2, y2). Cubic Beziers are the default curve primitive in SVG, PDF, and PostScript because they give C2-parametric continuity with only four points per segment - enough to express any smooth curve an illustrator draws by hand. The Catmull-Rom spline the generator uses is a well-known technique from 1974 (Edwin Catmull and Raphael Rom, "A class of local interpolating splines") that guarantees the curve passes through every control point, unlike B-splines which only approximate them. For a blob this is exactly the right property: you want to place control points on a rough circle and have the outline actually touch each one. The alternative - purely parametric noise fields like Perlin or Simplex noise - would produce more organically varied shapes but at the cost of determinism and a much harder export story.

Comparison to Blobmaker, Haikei, and Figma

Blobmaker.app is the best-known dedicated blob tool; it offers more presets and a slightly smoother curve (it uses a biased random walk rather than Catmull-Rom, which gives subtly different aesthetics). Haikei bundles blobs into a much larger shape generator family and is great if you want to compose blobs with gradients and wave backgrounds in a single file. Figma plugins like "Blobs 2" generate the shape directly inside the design file and let you manipulate the vertices as editable anchors afterward, which is the right workflow if the blob will be iterated multiple times inside a design. This generator\'s advantage is that it produces a minimal, readable SVG path with one d attribute that you can version-control as a string. Its disadvantage is that you cannot edit individual vertices after generation - it is a one-shot output, not a graph editor.

Frequently Asked Questions

What mathematical curve does the blob use?

Catmull-Rom splines converted to cubic Bezier segments. The anchor points are placed around the unit circle, offset radially by the randomness factor, and then each pair of anchors is joined with a Bezier whose control tangents are derived from the neighboring anchors using the standard <code>1/6</code> Catmull-Rom tension. This guarantees the curve passes through every anchor (unlike B-splines) while remaining C1-continuous across segments.

Why does higher randomness sometimes make ugly shapes?

At high randomness, adjacent anchors can be pushed in opposite directions sharply enough that the Bezier tangents cross, producing a visible pinch. Low-complexity blobs (3-4 points) with high randomness are the worst offenders because there are fewer neighbors to smooth the outline. Regenerate for a fresh seed or raise the complexity.

Can I keep the same blob across page reloads?

Yes, by exporting the SVG immediately after generation and committing it as a static asset. The generator does not expose a seed value for copy-paste reproduction, so the copied or downloaded file is your canonical reference. If you want parametric reproducibility - "this blob but slightly different each build" - you would need to extend the tool to emit a seed, which is a straightforward change to the component.

Why would I pick SVG over PNG export?

SVG is vector: it scales to any size, the rendered edge stays crisp on a 4K display or at print DPI, it is typically a few hundred bytes on disk versus kilobytes for a PNG, and you can restyle it with CSS by targeting the <code>&lt;path&gt;</code> element. PNG makes sense only when you need a raster asset for a platform that does not render SVG - for example, some social media OG image pipelines, or older email clients. For everything on the web, SVG is the default.

How do I use the blob as a CSS background?

Choose the CSS background export. The tool emits a <code>background-image: url("data:image/svg+xml,...")</code> declaration with the SVG percent-encoded inline, which you can paste onto any element. Combine it with <code>background-size: contain; background-repeat: no-repeat; background-position: center</code> to keep the aspect ratio. For responsive use, set the container size with <code>aspect-ratio: 1 / 1</code> so the blob does not stretch.

Can I change the blob color after copying?

Yes, but only cleanly if you use the inline SVG output. Replace the hardcoded fill hex with <code>fill="currentColor"</code> and the blob will inherit the CSS <code>color</code> property of its parent, letting you restyle it via CSS custom properties. The CSS-background data URI bakes the color into the encoded string, so to recolor that version you have to regenerate or manually edit the percent-encoded hex.

Is the blob accessible to screen readers?

By default, SVG elements are exposed to the accessibility tree with whatever <code>&lt;title&gt;</code> they contain. For a decorative blob (no semantic meaning), add <code>role="presentation"</code> or <code>aria-hidden="true"</code> to the root <code>&lt;svg&gt;</code> so screen readers skip it. If the blob is functional (an avatar frame, a logomark), give it a meaningful <code>&lt;title&gt;</code> that describes the element's purpose, not the shape itself.

Can I use this for commercial projects?

Yes. Every blob you generate is derived from your own parameter input and is not drawn from a licensed asset library. The SVG markup is generated deterministically by code and carries no copyright encumbrance - you can use the output in client work, SaaS products, or printed material without attribution.

Does the generator run on a server?

No. The path math, SVG serialization, and encoding all happen in the local Preact component. The download button uses a Blob URL and a synthetic anchor click; the copy button uses the Clipboard API. Your shape parameters never leave the browser tab, and the tool works offline once the page has loaded.

Why limit complexity to 10 points?

Beyond about 10 anchors, additional points contribute diminishing visual richness because the eye cannot distinguish tight crests in a small blob silhouette. Shapes with 20+ anchors tend to look noisy rather than organic, and at typical display sizes (200-500 pixels) the extra detail is lost to subpixel smoothing anyway. Ten is the practical ceiling where every point still has a visible effect.

Is this an SVG blob generator or does it also export raster?

Both. The SVG blob generator path emits a clean inline path you can paste into a component or save as a file, and the raster path renders the same shape to PNG via the canvas pipeline. Most users export the SVG because the file is tiny and scales infinitely; the PNG path is there for platforms that reject SVG (older email clients, certain ad networks) or when you want a fixed-resolution raster asset.

More CSS & Design