
Il logo morso dal dinosauro
Intro, SVG, Testo
NuovaGratis
L’intro di un logo con un grande pennello: piomba sulla tela, le setole si piegano e si aprono, e trascina una pennellata larga e materica che si scarica e diventa secca in fondo, con schizzi e colature. Nel colore si aprono le lettere in negativo, un secondo colpo giallo le riempie e alla fine dal pennello cade una goccia. Nel Playground ci metti il tuo nome o carichi il tuo logo.
Una cartella che funziona da sola: index.html, style.css, script.js e le librerie da CDN. Nelle schede React e Vue la stessa demo è già un componente, che spegne le sue animazioni quando esce dalla pagina.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The paintbrush logo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/syne@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="scena">
<!-- the stage: the script measures it, paints the canvas weave, builds the strokes and the brush, and paints the logo -->
<svg class="palco" data-stage role="img" aria-label="Daubry" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- the weave of the primed canvas: a little tile of threads the script paints on a canvas -->
<pattern id="weave" patternUnits="userSpaceOnUse" width="96" height="96">
<image width="96" height="96" data-weave-image />
</pattern>
<!-- the frayed, streaky edges of a brush stroke: a noise stretched along the stroke pushes the edges about -->
<filter id="fray" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB" data-fray>
<feTurbulence type="fractalNoise" numOctaves="2" result="streaks" data-fray-turb />
<feDisplacementMap in="SourceGraphic" in2="streaks" xChannelSelector="R" yChannelSelector="G" data-fray-disp />
</filter>
<filter id="fray-2" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB" data-fray-2>
<feTurbulence type="fractalNoise" numOctaves="2" result="streaks" data-fray-turb-2 />
<feDisplacementMap in="SourceGraphic" in2="streaks" xChannelSelector="R" yChannelSelector="G" data-fray-disp-2 />
</filter>
<!-- the logo cut out of the paint: white keeps the paint, the black letters open in it -->
<mask id="holes" maskUnits="userSpaceOnUse" data-holes-mask>
<rect fill="#fff" data-holes-rect />
<g data-holes></g>
</mask>
<!-- the brush is painted as wide as it goes: these two follow its tip -->
<clipPath id="reveal-1"><rect data-reveal-1 /></clipPath>
<clipPath id="reveal-2"><rect data-reveal-2 /></clipPath>
<!-- the brush's shadow on the canvas: its own outline, soft and dark -->
<filter id="brush-shadow" x="-40%" y="-40%" width="180%" height="180%">
<feGaussianBlur in="SourceAlpha" stdDeviation="6" result="soft" data-shadow-blur />
<feFlood class="ombra-tinta" result="tone" />
<feComposite in="tone" in2="soft" operator="in" />
</filter>
<!-- the wet shine that runs along the fresh paint -->
<linearGradient id="gloss-grad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" class="lucido-stop lucido-stop--via" />
<stop offset="0.5" class="lucido-stop" />
<stop offset="1" class="lucido-stop lucido-stop--via" />
</linearGradient>
</defs>
<!-- the primed canvas -->
<rect class="tela" data-wall />
<rect class="tela-trama" fill="url(#weave)" data-weave />
<g data-world>
<!-- the paint: the second colour under the first, the drips, the first stroke with the logo cut out of it -->
<g data-paint>
<g clip-path="url(#reveal-2)" data-coat-2></g>
<g data-drips></g>
<g mask="url(#holes)" data-coat-1-holder>
<g data-coat-1-place>
<g clip-path="url(#reveal-1)" data-coat-1></g>
</g>
<g data-rims></g>
<g data-ripples></g>
</g>
<g data-spots></g>
</g>
<!-- the brush and its shadow; 0 0 is the middle of the bristles' tip -->
<g data-shadow-place opacity="0">
<use href="#brush" filter="url(#brush-shadow)" />
</g>
<g data-brush-place>
<g id="brush">
<g data-handle-place>
<g data-handle></g>
</g>
<path class="setole" data-bristles />
<path class="setole-colore" data-bristles-paint />
<path class="setole-fili" data-strands />
<path class="setole-lucido" data-strands-light />
<path class="ghiera" data-ferrule />
<path class="ghiera-righe" data-ferrule-lines />
<path class="ghiera-luce" data-ferrule-light />
<g class="goccia-pennello" data-hanging>
<line data-hanging-neck />
<circle data-hanging-drop />
</g>
</g>
</g>
<g data-fx></g>
</g>
</svg>
<p class="nota">Click or tap to see it again</p>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Cambia valori, colori e testi con le manopole e guarda l’animazione rispondere dal vivo. Oppure scrivi tu nel codice. Poi scarica la cartella con le tue modifiche.
30 valori da cambiare
Col connettore di Animorio, Claude Code la prende da qui con tutta la sua guida e la adatta al tuo progetto. Incolla questa richiesta:
Prendi «Il logo dipinto a pennello» da Animorio e adattala al mio sitoIl palco è un SVG con il viewBox grande quanto la finestra, così un’unità è un pixel. Le lettere si misurano su una canvas con lo stesso carattere (measureText, actualBoundingBoxAscent per l’altezza vera) e tutto si conta in altezze di lettera: la pennellata è alta quanto il logo più un margine, comincia un’altezza prima e finisce, secca, un po’ dopo; il pennello è largo quanto la pennellata. Su uno schermo alto il logo prende tutta la larghezza e le code secche possono uscire dal bordo.
Il corpo è un tracciato solo: un bordo sopra e uno sotto mossi da una somma di seni, un grosso inizio tondo dove il pennello è atterrato e una fine che si apre in dita di colore. Un filtro sposta i bordi con un feDisplacementMap guidato da un feTurbulence stirato lungo la pennellata (frequenza bassa in orizzontale, alta in verticale), e così i bordi diventano fili. Sopra ci sono le creste scure e le righe lucide, tutte parallele alla pennellata; verso la fine, righe color tela con un gradiente che sale e un tratteggio a caso fanno vedere la tela, e oltre la fine restano strisce spezzate. La pennellata si scopre con un clipPath il cui rettangolo si allunga con lo stesso ease del pennello.
Ogni setola è una curva quadratica dalla bocca della ghiera alla punta. Tre numeri bastano per tutto: la pressione accorcia il ciuffo e lo apre a ventaglio, la trazione sposta il punto di controllo così che le punte restino indietro, e quanto colore c’è decide fin dove arriva la parte colorata (lo stesso tratto di curva, calcolato con de Casteljau). La ghiera va dalla bocca piatta al manico tondo, il manico è disegnato una volta lungo il suo asse. L’ombra è un use del pennello con un filtro di sfocatura, spostata e più chiara quanto più il pennello è lontano dalla tela.
La pennellata rossa ha una maschera: un rettangolo bianco e sopra le lettere in nero, ognuna scalata da zero con elastic.out intorno al suo centro, quindi si aprono come buchi nel colore. Le stesse lettere, solo col bordo scuro, fanno la cresta intorno ai buchi. La pennellata gialla sta sotto la rossa: si vede solo nei buchi, sotto il bordo e dopo la fine, quindi riempie il logo. Se IMAGE ha un indirizzo, un filtro trasforma le parti scure e colorate dell’immagine in nero per la maschera, e con feMorphology dilate fa il bordo.
Tutta l’entrata è una timeline sola, con le etichette start, arrive, press, stroke, lift, reveal, fill, drop, rest e leave e timeScale per la velocità. Il pennello segue la pennellata con un oggetto che avanza e a ogni passo legge l’altezza della pennellata in quel punto; un’inversa dell’ease dice quando il pennello passa da un punto, così gocce e colature partono al momento giusto. La goccia appesa si allunga, si stacca con lo strattone e diventa un’ellisse che cade con power2.in e si schiaccia sulla tela con elastic.out. La prima pittura è sempre uguale (un generatore a caso col seme fisso), così il poster cade sempre sullo stesso logo.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
NAME | script.js | 'Daubry' | Il logo scritto: si apre nel colore lettera per lettera. |
IMAGE | script.js | '' | Il logo come immagine: l’indirizzo di un file, oppure caricalo dal tuo computer. Se c’è, prende il posto della parola. |
PAINT | script.js | 1 | Quanto è carico il pennello: schizzi e colature (0 = pennellate pulite, 2 = colore che cola dappertutto). |
PRESSURE | script.js | 1 | Quanto preme il pennello: quanto si piegano e si aprono le setole, lo schiaffo sulla tela e il colpo. |
DRY | script.js | 1 | Quanto è lunga la fine secca e spezzata di ogni pennellata (0.2 corta, 2.5 lunga). |
TINT | script.js | true | Un’immagine si riempie del secondo colore; con false si riempie dei suoi colori. |
SPEED | script.js | 1 | La velocità di tutta l’animazione: 2 è il doppio, 0.5 la metà. |
REST | script.js | 4 | Quanti secondi il logo dipinto resta in mostra prima che il colore coli via. |
LOOP | script.js | true | Se il colore cola via e si dipinge di nuovo. Con false il logo resta, con un luccichio ogni tanto. |
Per presentare un logo con un gesto pieno di colore e di mano: l’apertura del sito di un imbianchino, di un colorificio, di una scuola d’arte, di un festival, di un marchio di streetwear o di un locale, l’anteprima per un cliente, un caricamento, un post per i social. Funziona con un marchio scritto e con un’immagine.
La stessa animazione con le misure adattate: su uno schermo alto il logo è largo quasi quanto lo schermo, le code secche delle pennellate escono dal bordo e il pennello, grande, entra e esce dai lati. Un tocco la fa ripartire.
Niente si muove: il pennello compare in dissolvenza sopra la tela, poi compare la pennellata rossa con le colature e il pennello svanisce; nella pennellata compaiono le lettere in negativo e poi il giallo che le riempie. Se l’animazione ricomincia, il colore se ne va in dissolvenza.
GSAP 3.15.0, Syne (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 17 KB; le librerie: GSAP 28 KB.
Provata il 11 ottobre 2026
Puoi usarla nei tuoi progetti e in quelli dei tuoi clienti. Non puoi rivenderla né ridistribuirla così com’è. GSAP resta sotto la sua licenza Standard. Licenza completa.
Con l’email e la password del tuo account.
oppure con l’email
Hai fatto l’accesso come .
Con l’account scarichi lo zip di ogni animazione e di ogni pacchetto, gratis.