Design
Direction changes the mood
The same pair reads as depth at 180 degrees and as motion at 135. Turning the angle is usually faster than hunting for a new pair of colors.
Gradient blob generator
Pick a start and an end color, set the direction in CSS degrees, and the blend follows the outline. Export the shape as SVG, PNG or code with the gradient already in it.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500" width="100%"><defs><linearGradient id="blob-gradient" x1="0.146" y1="0.146" x2="0.854" y2="0.854"><stop offset="0" stop-color="#c2e59c"/><stop offset="1" stop-color="#64b3f4"/></linearGradient></defs><path d="M393,329Q341,408,253,402.5Q165,397,121,323.5Q77,250,101.5,143Q126,36,249,37Q372,38,408.5,144Q445,250,393,329Z" fill="url(#blob-gradient)"/></svg>Overview
The gradient takes two stops and an angle measured the way CSS measures it: 0 degrees runs bottom to top, 90 degrees runs left to right, 180 degrees runs top to bottom, and 135 degrees runs from the top-left corner toward the bottom-right.
Everything else works as it does for a solid blob. Complexity sets the node count from 3 to 20, Randomness from 2 to 9 decides how far the outline can wander, and the seed makes the shape repeatable. The angle rides in the URL as ga, so a link rebuilds the exact blend.
Design
The same pair reads as depth at 180 degrees and as motion at 135. Turning the angle is usually faster than hunting for a new pair of colors.
Code
The export writes a linearGradient in defs with the stops and coordinates set, not a flattened image, so both colors stay editable afterward.
Contrast
Text over a gradient meets its lightest and its darkest point. The panel shows both stops so you can test the harder one before shipping.
Export
The stops and the angle survive every route out of the generator, so what you see in the preview is what lands in the file.
One path and a linearGradient in defs, with x1, y1, x2 and y2 already resolved from the angle you set. Under a kilobyte before compression.
Download the vector, or a PNG at 512, 1024 or 2048 pixels with a transparent background for tools that cannot read SVG.
The shape as a data URI, plus a matching linear-gradient declaration in the same degrees if you would rather blend in CSS and clip the box.
A component with the gradient in its defs, and a CustomPainter using a LinearGradient with begin and end points derived from the angle.
Switch the same shape to a solid color, a pattern, a clipped image or outline only, without losing the seed or the node count.
Both stops and the angle travel in the query string, so the URL reopens the identical fill on any device.
How it works
Shape first, color second. The gradient is applied to whatever outline is on the canvas, so you can keep shuffling after you have chosen the colors.
Set Complexity and Randomness, then shuffle for a new seed. Fewer nodes and a high Randomness value give the calm shapes that carry a gradient best.
Choose a start and an end color. Pairs that sit near each other on the color wheel read as one surface; pairs from opposite sides read as two.
Set the angle in degrees. 180 for depth under a headline, 90 for a band that leads across a section, 135 for a diagonal that follows a reading path.
Copy the markup, download SVG or PNG, or take the CSS, React or Flutter code. Keep the URL if you want to come back to this exact blend.
Examples
Each link opens the generator with the pair and the angle loaded. Change one stop at a time to see what the direction is doing.
Seven nodes and a 135-degree blend from c2e59c to 64b3f4. Light enough to sit behind dark headline text.
Four nodes, a high Randomness value and a 90-degree blend from eecda3 to ef629f. Nearly circular, warm, and quiet at small sizes.
The same pair at 180 degrees on a five-node shape. Vertical blends read as depth rather than as movement across the page.
Ten nodes and a 45-degree blend from 7c5cff to ef629f, running up and to the right. Saturated enough to carry a dark section on its own.
In depth
The direction control uses the same convention as the CSS linear-gradient function. The angle names the direction the blend travels toward, measured clockwise from straight up. So 0 degrees runs from the bottom of the shape to the top, 90 degrees runs left to right, 180 degrees runs top to bottom, and 270 degrees runs right to left. Diagonals follow from the same rule: 135 degrees points at the bottom-right corner, so the first stop sits at the top-left, and 45 degrees points at the top-right, so the first stop sits at the bottom-left.
Inside the exported SVG this becomes a linearGradient with x1, y1, x2 and y2 computed from the angle, because SVG describes a gradient by the line it runs along rather than by a rotation. The CSS export writes the same figure back as degrees. The practical effect is that a blob exported at 135 degrees and a CSS background written as linear-gradient(135deg, …) point the same way, so a shape and the section behind it can be kept in step.
Two stops close together on the color wheel read as one surface catching light, which is what you usually want behind a headline: the blob looks like a shape rather than like a poster. Two stops far apart read as two colors meeting, which draws attention and works better for an accent that is meant to be noticed, such as a badge or an empty-state illustration.
Keep the two stops close in lightness unless you want a visible band. A pale stop next to a deep one produces a hard edge somewhere in the middle of the shape, and on an irregular outline that edge lands in a different place each time you shuffle. If the pair must span a wide lightness range, lengthen the blend by pointing it along the shape's longest axis, which on most blobs is roughly diagonal.
Saturation matters more than hue at large sizes. A full-bleed background blob wants both stops desaturated, because the shape covers enough of the viewport that a saturated fill sets the mood of the whole page. A 200-pixel accent can take both stops at full strength without overwhelming anything.
A gradient gives text two backgrounds at once, and the contrast ratio has to hold against the worse of them. Work out the ratio at both stops before shipping, not at the average. Body text needs 4.5 to 1 and large text, meaning about 24 pixels or 18.66 pixels bold, needs 3 to 1.
Two worked examples from the preset pairs. Ink-colored text at 344f5c on the apricot stop eecda3 gives roughly 5.7 to 1, which is comfortable for body copy. White text on the rose stop ef629f gives roughly 3 to 1, which passes for a large headline and fails for a paragraph. The same gradient can therefore be safe under a heading and unsafe under the sentence below it.
When a pair will not hold, there are three fixes that do not mean changing the colors. Move the text off the blob and let the shape sit beside it. Put a flat panel behind the text, with the blob visible around it. Or point the angle so that the readable stop covers the area the text sits over, which is usually 180 degrees with the light stop first.
The SVG export keeps the gradient as a real linearGradient in defs with an id, so both stops can be changed later in an editor or from script. If several blobs share a page, rename the ids or scope the markup, because gradient ids are global to the document and a duplicate silently wins.
The CSS export gives the shape as a data URI plus a linear-gradient declaration in the same degrees, which suits a decorative background that no script needs to touch. The React export is the same markup as a component with size and color props. The Flutter export paints a LinearGradient whose begin and end alignments are derived from the angle, so a blob drawn on a canvas in an app matches the one on the marketing page it came from.
Questions
One to one. The value is the direction the blend travels toward, measured clockwise from straight up, exactly as in linear-gradient. 180 is top to bottom, 90 is left to right, 0 is bottom to top, and 135 runs from the top-left corner toward the bottom-right.
The generator works with two. For more, export the SVG and add stop elements inside the linearGradient in defs; the path does not change. Two stops cover most cases, and a third often produces a band that fights the outline.
Usually because the two stops are far apart in lightness, which puts a visible edge in the middle of the shape. Bring the stops closer in lightness, or lengthen the blend by pointing it along the shape's longest axis.
Only if it clears the contrast threshold at both stops. Check the lighter stop, since that is where white text fails first. Body text needs 4.5 to 1 and large text needs 3 to 1, so a pair that works under a headline may not work under a paragraph.
Yes. The PNG is rendered from the same markup at 512, 1024 or 2048 pixels with a transparent background outside the shape. It is a flat image afterward, so pick the colors before exporting if the file is going somewhere you cannot edit vectors.
Get started
Two stops, one angle, and the same export formats as every other blob. Start from a preset or shuffle your own shape.