Generator SVG Blob
Generuj losowe organiczne kształty SVG (blob, morph) do użycia jako tło lub dekoracja strony. Kontroluj złożoność, gładkość i kolory. Animowane lub statyczne. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Ustawienia generatora
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600" role="img" aria-label="Generated blob"><path d="M 554.69 300 C 557.29 351.46 527.23 421.22 491.79 460.93 C 456.34 500.63 395.85 527.15 342.01 538.23 C 288.16 549.3 211 554.23 168.73 527.37 C 126.45 500.5 100.2 427.21 88.35 377.04 C 76.49 326.86 79.34 268.65 97.6 226.33 C 115.85 184.01 156.46 154.38 197.87 123.11 C 239.29 91.84 299.69 33.87 346.07 38.71 C 392.45 43.56 441.39 108.64 476.16 152.19 C 510.93 195.73 552.08 248.54 554.69 300 Z" fill="#8f6677" stroke="none" stroke-width="0" /></svg>
Wymiary
Liczba punktów
kotwice krzywej Béziera co kąt 2π/n
Wariancja
Kolor wypełnienia
Ziarno (seed)
liczbowe ziarno = powtarzalny kształt
Rozmiar SVG
waga gotowego kodu do wklejenia
Opis odpowiada 1:1 kodowi silnika, który generuje podgląd: punkty na okręgu, losowa odchyłka promienia zależna od ziarno, spline Catmull-Rom przeliczony na krzywe sześcienne Béziera.
| Etap | Co robi silnik |
|---|---|
| Punkty kotwiczne | n punktów (4–32) rozmieszczonych na okręgu wokół środka płótna, co kąt 2π/n |
| Promień punktu | baza = 0,38 × min(szerokość, wysokość); promień punktu = baza × (1 + dr), gdzie dr to losowa odchyłka z przedziału [−zmienność, +zmienność] |
| Ziarno (seed) | liczbowe ziarno uruchamia mt_srand() — ten sam seed daje zawsze identyczny kształt; puste pole losuje ziarno przez random_int(), więc każdy blob jest inny |
| Krzywe | spline Catmull-Rom na punktach przeliczony na krzywe sześcienne Béziera: C1 = P1 + (P2 − P0)/6, C2 = P2 − (P3 − P1)/6; ścieżka zamykana komendą Z |
| Kolor wypełnienia | tryb losowy: mt_rand(20, 235) osobno dla kanałów R/G/B; tryb własny: kolor HEX z formularza (domyślnie #6f42c1) |
| Obrys | opcjonalny, kolor rgba(0,0,0,0.22), grubość 1–20 px; bez obrysu stroke="none" |
| Zastosowanie | Po co |
|---|---|
| Organiczne tła | sekcje hero i banery — miękki, asymetryczny kształt łagodzi sztywne siatki kolumn i prostokątne zdjęcia |
| Karty i wyróżnienia | plamka w tle karty cenowej czy opinii kieruje wzrok bez ostrej ramki |
| Ilustracje i onboarding | przyjazne kształty w pustych stanach aplikacji, ekranach powitalnych i loaderach |
| Placeholdery grafik | lekki plik SVG (zwykle 1–3 KB) zamiast ciężkiego rastra w makietach i prototypach |
Warto wiedzieć — bloby SVG w praktyce
Skąd „organiczny” wygląd
Punkty leżą na okręgu, ale każdy promień jest losowo odchylony o zmienność, a zamiast linii łamanej silnik prowadzi przez nie spline Catmull-Rom zamieniony na krzywe Béziera. Efekt to gładka, nieregularna plamka — bez ostrych rogów i bez powtarzalnego rytmu.
Ziarno = powtarzalność
Liczbowe ziarno (seed) inicjuje generator mt_srand(), więc ten sam seed przy tych samych ustawieniach da identyczny kształt — przydatne, gdy blob musi trafić do wersjonowanego projektu. Puste pole losuje ziarno przez random_int(): każdy przebieg daje inny kształt.
Waga i wydajność
Ścieżka ma tyle krzywych Béziera, ile punktu (4–32), więc kod zwykle mieści się w 1–3 KB — bez zależności i bez requestów. Mniej punktów i niższa zmienność dają krótszy d="…"; do tła sekcji zwykle wystarcza 8–12 punktów.
Dobre praktyki
W tle sekcji osadź blob jako position:absolute z obniżonym kryciem lub gradientem, a treść trzymaj w osobnej warstwie. Dodaj aria-hidden="true", gdy kształt jest czysto dekoracyjny — podglądowy SVG ma etykietę „Generated blob”, którą w produkcji warto zastąpić świadomą decyzją.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator SVG Blob – organiczne kształty bez edytora wektorowego
Blob (organiczny kształt) to nieprawidłowa, zaokrąglona figura używana w nowoczesnym web designie jako tło, ozdoba karty lub maska. Narzędzie generuje unikalne blobby przez losowe modyfikowanie węzłów krzywej Beziera – każde kliknięcie daje inny kształt.
Algorytm generowania blobów
Bazowy wielokąt (np. 8 węzłów) na okręgu. Każdy węzeł przesuwa się losowo wzdłuż promienia (±20-40% od idealnego okręgu). Tangenty Beziera: obliczane dla gładkich przejść. Parametr "złożoność": liczba węzłów (4=prosty, 12=skomplikowany). "Gładkość": długość tangentu (0=kanciasty, 1=okrągły).
Warianty kształtów
Statyczny blob: pojedyncza ścieżka SVG
Wypełnienia i efekty
Kolor jednorodny: fill="#FF6B6B". Gradient liniowy: 2-3 kolory w dowolnym kierunku. Gradient radialny: promieniowy, efekt "glow". Gradient siatki (mesh gradient): eksperymentalne CSS. Przezroczystość (opacity): nakładanie kilku blobów różnej przezroczystości. Filtr SVG: rozmycie (feGaussianBlur), cień.
Zastosowania w projekcie
Tła sekcji hero: blob jako backdrop z niskim opacity. Karty (cards): blob jako dekoracyjny element tła karty produktu. Maski obrazów:
Jak z okręgu powstaje ścieżka Beziera
Kształt powstaje w dwóch krokach. Najpierw węzły rozkładane są równomiernie na okręgu: dla n węzłów kąt kolejnego punktu to 360° / n, a jego położenie opisują wzory x = cx + r·cos θ oraz y = cy + r·sin θ. Promień r nie jest stały — każdy węzeł dostaje własny mnożnik z przedziału ±20–40% wartości bazowej. Układ współrzędnych jest taki jak w SVG, czyli oś Y rośnie w dół: kąt 90° wskazuje dół płótna, a 270° jego górę.
Z samych punktów powstałby wielokąt, dlatego drugi krok zamienia łamaną na krzywe sześcienne Beziera. Pojedynczy segment opisuje równanie B(t) = (1−t)³P0 + 3(1−t)²t·P1 + 3(1−t)t²·P2 + t³P3 dla t z przedziału od 0 do 1, gdzie P0 i P3 to węzły, a P1 i P2 to punkty kontrolne. Ich kierunek wyznacza wektor styczny liczony z sąsiadów węzła: d = (P(i+1) − P(i−1)) / 6. Punkt kontrolny leży w odległości s·d od węzła, gdzie s to parametr gładkości.
Gładkość 0 stawia punkty kontrolne dokładnie na węzłach i segmenty stają się proste, czyli obrys jest kanciasty. Im bliżej 1, tym dłuższe ramiona styczne i pełniejszy łuk. Całość zapisywana jest jako jedna ścieżka: M z punktem startowym, seria poleceń C z trzema parami współrzędnych na segment i Z na końcu. Kształt jest deterministyczny — te same węzły i te same mnożniki promienia dają identyczną ścieżkę, a losowość dotyczy wyłącznie momentu generowania.
Przykład: blob z 8 węzłów na płótnie 200 × 200
- Ustal płótno: viewBox 0 0 200 200, środek w punkcie (100, 100) i bazowy promień R = 72.
- Przyjmij 8 węzłów — kąt między kolejnymi wynosi 360° / 8 = 45°.
- Wylosuj mnożniki promienia w zakresie ±25%, czyli od 0,75 do 1,25. W tym przykładzie wychodzą promienie: 86, 58, 90, 61, 84, 56, 88 i 60.
- Przelicz węzły na współrzędne: (186, 100), (141, 141), (100, 190), (57, 143), (16, 100), (60, 60), (100, 12) oraz (142, 58). Skrajne wartości to 12 i 190, więc kształt mieści się w płótnie.
- Policz styczne. Dla węzła (186, 100) sąsiedzi to (142, 58) i (141, 141), więc d = ((141 − 142) / 6, (141 − 58) / 6) = (−0,17, 13,83). Przy gładkości s = 0,5 pierwszy punkt kontrolny wypada w (185,9, 106,9).
- Dla węzła (141, 141) wektor styczny d = ((100 − 186) / 6, (190 − 100) / 6) = (−14,33, 15) daje drugi punkt kontrolny (148,2, 133,5). Powtórz obliczenia dla pozostałych węzłów i zamknij ścieżkę poleceniem Z — otrzymasz jedną krzywą złożoną z 8 segmentów.
Parametry i ich wpływ na kształt
| Parametr | Wartość | Efekt w ścieżce |
|---|---|---|
| Liczba węzłów | 4 | 4 segmenty C, obrys zbliżony do zaokrąglonego czworokąta |
| Liczba węzłów | 8 | 8 segmentów C, kompromis między prostotą a organicznością |
| Liczba węzłów | 12 | 12 segmentów C, mocno pofalowany obrys do dużych powierzchni |
| Przesunięcie promienia | ±20% | subtelne odchylenia, kształt wciąż blisko okręgu |
| Przesunięcie promienia | ±40% | silna deformacja, obrys daleko od okręgu |
| Gładkość | 0 | punkty kontrolne na węzłach, segmenty proste |
| Gładkość | 0,5 | umiarkowane łuki, gładkie przejścia bez pętli |
| Gładkość | 1 | pełne ramiona styczne, największa krągłość obrysu |
Jak wkleić wygenerowany blob do projektu
- Trzymaj się płótna, w którym liczył generator — jeśli kształt powstał w kwadracie 200 × 200, wstaw go do SVG z takim samym viewBox. Przy prostokątnym kontenerze dodaj preserveAspectRatio, żeby blob wypełnił tło bez zniekształcenia proporcji.
- Dobierz liczbę węzłów do rozmiaru — na tło sekcji i małe karty zwykle wystarcza 8 węzłów; 12 ma sens dopiero przy dużych powierzchniach, gdzie widać każdy załom.
- Skracaj zapis ścieżki — zaokrąglij współrzędne do jednego lub dwóch miejsc po przecinku. Wygląd się nie zmieni, a atrybut d będzie krótszy i czytelniejszy w kodzie.
- Nie opieraj na blobie czytelności — jasny kształt pod jasnym tekstem obniża kontrast, dlatego przy napisach zejdź z kryciem wypełnienia albo rozmyj obrys filtrem.
- Traktuj blob jako dekorację — dodaj aria-hidden, żeby czytniki ekranu pominęły kształt, i wyłącz animację morfingu dla użytkowników, którzy ustawili ograniczenie ruchu w systemie.
Czego generator nie sprawdzi
- Skalowania ścieżki w CSS — clip-path: path() interpretuje współrzędne w pikselach elementu, więc ta sama ścieżka na innym rozmiarze kontenera da inny kadr. Trzeba przeliczyć punkty albo użyć clipPath z własnym viewBox.
- Kontrastu z treścią — narzędzie nie wie, jaki tekst i jaki kolor tła znajdą się na blobie, więc nie ostrzeże, że napis stanie się nieczytelny.
- Atrakcyjności kształtu — losowe mnożniki przy ±40% potrafią dać obrys niechlujny i zapadnięty. Sensowna praktyka to wygenerowanie kilku wariantów i wybór najlepszego.
- Zgodności animacji morfingu — przejście między dwiema ścieżkami interpoluje się tylko wtedy, gdy mają tę samą liczbę i kolejność węzłów. Przy różnej liczbie animacja się zerwie, a nie płynnie zamieni.
Najczęstsze pytania
Jak użyć bloba jako maski obrazu w CSS?
Skopiuj path: clip-path: path("M...") lub użyj SVG clipPath. CSS: .avatar { clip-path: path("M 100..."); }. Animacja: @keyframes morph { 0% { clip-path: path("M..."); } 100% { clip-path: path("M..."); } }. Oba paths muszą mieć tę samą liczbę węzłów.
Jak wyeksportować bloba do Figma?
Skopiuj kod SVG. W Figma: File → Import lub wklej jako wektor (Paste in Place). Figma importuje SVG jako edytowalne wektory. Możesz edytować węzły (Edit Vector) i zmieniać kolory. Alternatywnie: skopiuj path d="..." i utwórz Vector Shape ręcznie.
Ile węzłów (nodes) ma idealny blob?
6-8 węzłów: optymalnie – naturalny wygląd bez zbyt wielu "dziobów". Mniej niż 5: trójkąt lub kwadrat z zaokrągleniami, zbyt geometryczny. Więcej niż 12: skomplikowany, "nerwowy" kształt. Dla animowanego morph: parzysty liczba węzłów.
Czy można animować blob przez CSS bez JavaScript?
Tak:
Jak uniknąć "dziobów" (sharp spikes) w blobie?
Zwiększ parametr "gładkości" (smoothness) – dłuższe tangenty Beziera. Zmniejsz "variancję" – mniejsze przesunięcia węzłów od okręgu. Minimalny promień węzła: > 30% maksymalnego (żeby nie tworzyć wgłębień zbyt głębokich).
Ile węzłów powinien mieć blob, żeby wyglądał naturalnie?
Najbezpieczniejszy wybór to 8 węzłów. Cztery dają kształt zbyt przewidywalny i geometryczny, a dwanaście w małym rozmiarze bywa poszarpane, bo załomy są gęstsze niż szerokość elementu.
Dlaczego blob w clip-path nie skaluje się razem z elementem?
Bo clip-path: path() przyjmuje współrzędne w pikselach elementu i nie rozciąga ich przy zmianie rozmiaru. Jeśli potrzebujesz skalowania, wygeneruj blob w docelowym rozmiarze albo osadź go jako clipPath w SVG z viewBox.
Czym różni się gładkość 0 od gładkości 1?
Przy 0 punkty kontrolne leżą na węzłach, więc segmenty są prostymi i obrys wychodzi kanciasty. Przy 1 ramiona styczne mają pełną długość, obrys staje się maksymalnie okrągły, ale łatwiej o pętle na ostrych zmianach promienia.
Jak zrobić z bloba rozmyta plama lub efekt poświaty?
Najprościej nałożyć na kształt filtr rozmycia SVG albo rozmycie CSS i zejść z kryciem wypełnienia do kilkunastu procent. Pamiętaj o marginesie wokół ścieżki, bo rozmycie wychodzi poza jej obrys.
Czy da się wygenerować dokładnie ten sam blob ponownie?
Tak, o ile zachowasz wynik, czyli gotową ścieżkę albo same mnożniki promienia dla kolejnych węzłów. Kształt jest deterministyczny, więc te same dane wejściowe zawsze dadzą identyczny obrys, natomiast ponowne losowanie da inny wynik.
Powiązane narzędzia: generator wielokątów SVG, generator fal SVG i generator gradientów CSS.