Das kleinste transparente GIF ist 43 Bytes groß.
Das ist alles. Wähle ein Byte, um zu sehen, was es tut, und kopiere die Datei dann, lade sie herunter, hotlinke sie oder liefere sie aus deinem eigenen Code aus.

Was jedes Byte tut
Ein GIF ist eine Folge von Blöcken. Dieses hat sieben, und jede Farbe auf dieser Seite gehört zu einem davon. Wähle ein Byte oder einen Block aus, um die Beschreibung zu lesen. Zahlen werden als Little-Endian gespeichert: Das niederwertige Byte kommt zuerst, 01 00 bedeutet also 1.
| Bytes | Feld | Bedeutung |
|---|---|---|
| Header Teilt dem Decoder mit, dass dies ein GIF ist und welche Formatversion er erwarten soll. | ||
| 47 49 46 | Signatur | Die ASCII-Buchstaben „GIF“. Jede GIF-Datei beginnt damit. |
| 38 39 61 | Version | „89a“. Für Transparenz ist 89a nötig; 87a hat keine Grafiksteuerungserweiterung. |
| Logischer Bildschirmdeskriptor Die Größe der Leinwand und wie ihre Farbtabelle aufgebaut ist. | ||
| 01 00 | Leinwandbreite | 1 px. |
| 01 00 | Leinwandhöhe | 1 px. |
| 80 | Gepackte Flags | Vier Einstellungen, in ein Byte gequetscht. Das höchste Bit besagt, dass eine globale Farbtabelle folgt; die letzten drei Bits geben ihre Größe an. |
| 00 | Hintergrundfarbindex | Paletteneintrag 0. Browser ignorieren ihn und zeigen, was hinter dem Bild liegt. |
| 00 | Pixel-Seitenverhältnis | 0 bedeutet quadratische Pixel, ohne Korrektur. |
| Globale Farbtabelle Die Palette. Pixel speichern statt einer Farbe einen Index in diese Liste. | ||
| FF FF FF | Paletteneintrag | Rot, Grün und Blau, je ein Byte: #ffffff. Zwei Einträge sind die kleinste Tabelle, die ein GIF haben kann. |
| 00 00 00 | Paletteneintrag | Rot, Grün und Blau, je ein Byte: #000000. Zwei Einträge sind die kleinste Tabelle, die ein GIF haben kann. |
| Grafiksteuerungserweiterung Optionaler Block, eingeführt mit GIF89a. Hier macht er Paletteneintrag 0 transparent. | ||
| 21 | Erweiterungseinleitung | 0x21 („!“) kündigt einen Erweiterungsblock an. |
| F9 | Grafiksteuerungs-Label | 0xF9 besagt, dass diese Erweiterung eine Grafiksteuerungserweiterung ist. |
| 04 | Blockgröße | Es folgen 4 Bytes an Einstellungen. |
| 01 | Gepackte Flags | Das niedrigste Bit ist das Transparenz-Flag. Es ist gesetzt, also wird der transparente Index unten verwendet. |
| 00 00 | Verzögerung | 0 Hundertstelsekunden. Nur für Animationen relevant. |
| 00 | Transparenzfarbindex | Paletteneintrag 0 wird vollständig transparent gezeichnet. |
| 00 | Blockterminator | Ein Sub-Block der Länge null, der den Block abschließt. |
| Bilddeskriptor Wo das Bild auf der Leinwand liegt und wie groß es ist. | ||
| 2C | Bildtrenner | 0x2C („,“) leitet ein Bild ein. |
| 00 00 | Links | Das Bild beginnt 0 px vom linken Rand der Leinwand. |
| 00 00 | Oben | Das Bild beginnt 0 px vom oberen Rand der Leinwand. |
| 01 00 | Bildbreite | 1 px. |
| 01 00 | Bildhöhe | 1 px. |
| 00 | Gepackte Flags | Keine lokale Farbtabelle, kein Interlacing. Das Bild verwendet die globale Palette. |
| Bilddaten Die Pixel, mit LZW komprimiert und in Sub-Blöcke von bis zu 255 Bytes aufgeteilt. | ||
| 02 | LZW-Mindestcodegröße | 2, die komprimierten Codes sind also anfangs 3 Bits breit. |
| 02 | Sub-Block-Größe | Es folgen 2 Bytes komprimierte Daten. |
| 44 01 | Komprimierte Pixel | LZW-Codes, vom niedrigsten Bit an gepackt. Wie sie dekodiert werden, siehst du weiter unten. |
| 00 | Blockterminator | Ein Sub-Block der Länge null, der den Block abschließt. |
| Trailer Ein Byte, das das Ende der Datei markiert. | ||
| 3B | Trailer | 0x3B („;“) beendet die Datei. |
In den gepackten Bytes
Drei Bytes speichern jeweils mehrere kleine Einstellungen. Bit 7 ist das linke.
0x800x010x00Wie zwei Bytes ein Pixel enthalten
Bei einer Mindestcodegröße von 2 liest der Decoder 3-Bit-Codes. Code 4 leert die Tabelle, Code 5 beendet das Bild, und die Codes 0 bis 3 sind Paletteneinträge. Die Bytes 44 01 werden vom niedrigsten Bit an gelesen:
0x44 010001000x01 00000001
- 001100 = 4Clear: mit frischer Tabelle beginnen
- 000000 = 0Pixel: Paletteneintrag 0
- 101101 = 5Bildende
- 0000000 Ungenutzte Füllbits
Größere Bilder nutzen denselben Trick: Jeder neue Code steht für eine Folge, die ein Pixel länger ist als die vorige, daher braucht ein transparentes 1000×1000-GIF nur 1.743 Bytes.
Geht es kleiner?
Ja, wenn du Teile weglässt, deren Fehlen Decoder tolerieren. Wir haben jede Variante drei Browser-Engines und Pillow vorgesetzt und festgehalten, was sie gezeichnet haben.
| Größe | Variante | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | Die Standarddatei dieser Seite. | Transparent | Transparent | Transparent | Transparent |
| 42 | Kein Trailer-Byte. Decoder hören am Ende der Daten ohnehin auf. | Transparent | Transparent | Transparent | Transparent |
| 37 | Gar keine Palette. Trotzdem gültig: Die Spezifikation erlaubt Decodern eine eigene Palette, und Index 0 ist ohnehin transparent. | Transparent | Transparent | Transparent | Transparent |
| 36 | Keine Palette und kein Trailer. | Transparent | Transparent | Transparent | Transparent |
| 35 | Kein Transparenzblock: Das Pixel wird in Palettenfarbe 0 gezeichnet, Weiß. | Weiß | Weiß | Weiß | Weiß |
| 35 | Das Format von 1987. Es kann keine Farbe als transparent markieren. | Weiß | Weiß | Weiß | Weiß |
| 34 | Transparenzblock, aber keine komprimierten Pixel. | Transparent | Transparent | Transparent | Fehler |
| 33 | Dasselbe ohne Trailer. | Transparent | Transparent | Transparent | Fehler |
| 29 | Keine Palette und keine Transparenz. Jede Engine wählt ihre eigene Farbe. | Schwarz | Weiß | Transparent | Schwarz |
| 26 | Ein Bild ganz ohne komprimierte Daten. | Transparent | Transparent | Transparent | Fehler |
| 14 | Nur Header, Leinwandgröße und Trailer. Es enthält kein Bild. | Transparent | Fehler | Transparent | Fehler |
Nimm die 43 Bytes, wenn es überall funktionieren muss. 37 Bytes sind noch ein gültiges GIF und waren in jeder getesteten Engine transparent. Darunter bist du auf die Nachsicht des Decoders angewiesen, und die 29-Byte-Datei zeigt, wie uneinig sich die Engines sind.
Geprüft am 23. September 2026 mit Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.
In beliebiger Größe erzeugen
Transparent oder in einer Vollfarbe, von 1×1 bis 65535×65535. Es wird in deinem Browser erzeugt; nichts wird hochgeladen.
Hotlinken
Verlinke diese Dateien direkt von jeder Website, E-Mail oder App aus. Sie werden über das Edge-Netzwerk von Cloudflare mit langen Cache-Laufzeiten ausgeliefert, und CORS ist für alle offen.
- Die 43-Byte-Datei
https://emptygif.com/1x1.gif - Beliebige Größe, transparent
https://emptygif.com/px/300x250.gif - Beliebige Größe, Vollfarbe
https://emptygif.com/px/300x250/ff5a1f.gif - JSON-API: Größe, base64 und Data-URI
https://emptygif.com/api/gif?w=300&h=250 - Alle Snippets als JSON
https://emptygif.com/snippets.json - Zusammenfassung für KI-Agenten
https://emptygif.com/llms.txt
Antwort-Header
HTTP/2 200
content-type: image/gif
content-length: 43
cache-control: public, max-age=31536000, immutable
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
timing-allow-origin: *Beispiel
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Generierte Größen gehen bis 4096 px pro Seite. Bei viel Traffic lade die Datei bitte herunter und hoste sie selbst.
Aus deinem Stack ausliefern
173 sofort lauffähige Snippets. Such dir deins aus: Jedes antwortet unter dem gewählten Pfad mit einer image/gif-Antwort. Wenn du oben Größe oder Farbe geändert hast, verwenden die Snippets dieses GIF.
JavaScript & TypeScript
Edge & serverless
- Cloudflare Workers
- Cloudflare Workers (Rust, workers-rs)
- Cloudflare Pages Functions
- Deno Deploy (deno serve)
- Vercel Functions
- Netlify Functions
- Netlify Edge Functions
- AWS Lambda (Node.js)
- AWS Lambda (Python)
- AWS Lambda (Go)
- AWS Lambda (Rust, lambda_http)
- AWS Lambda@Edge (CloudFront)
- Google Cloud Run functions (Node.js)
- Google Cloud Run functions (Python)
- Firebase Cloud Functions + Hosting
- Azure Functions (Node.js v4 model)
- Fastly Compute (JavaScript)
Python
JVM
PHP
Elixir, Erlang & Gleam
Functional languages
C, C++ & systems languages
Swift, Dart & other languages
Web servers & proxies
Command line & one-liners
Express JavaScript
import express from 'express';
const GIF = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');
const app = express();
app.get('/pixel.gif', (req, res) => {
res.set('Cache-Control', 'no-store');
res.type('gif').send(GIF);
});
app.listen(8080);
Wir haben dieses Snippet ausgeführt und die zurückgegebenen Bytes verglichen. Seite öffnen
Wofür man es verwendet
- Tracking-Pixel und Beacons: Der Server protokolliert die Anfrage und antwortet mit dem kleinstmöglichen gültigen Bild.
- Platzhalter für Lazy-Loading-Bilder, damit das
img-Tag gültig ist, bevor die echte Quelle geladen ist. - Abstandhalter fester Größe in HTML-E-Mails, wo die CSS-Unterstützung lückenhaft ist.
- Tests und Mocks, die ein echtes Bild brauchen, ohne eines mitzuliefern.
Tracking-Pixel sind weniger zuverlässig, als sie scheinen
Apple Mail lädt entfernte Bilder über einen Proxy vorab, wenn der Mail-Datenschutz („Mail-Aktivität schützen“) aktiv ist, eine „Öffnung“ stammt also womöglich nie von einem Menschen. Auch Gmail ruft Bilder über einen eigenen Proxy ab und cacht sie. Viele Clients blockieren entfernte Bilder standardmäßig. Für Seitenanalysen passen navigator.sendBeacon() oder eine 204 No Content-Antwort oft besser als ein Bild.
Häufige Fragen
- Warum heißt es leer, wenn es ein Pixel hat?
- Ein GIF muss mindestens ein Pixel haben. Dieses ist 1×1 groß, und seine einzige Farbe ist als transparent markiert, also ist nichts zu sehen.
- Ist die 43-Byte-Datei gültig?
- Ja. Sie folgt exakt der GIF89a-Spezifikation, und jede Engine in der Tabelle oben zeichnet sie transparent.
- Warum GIF und nicht PNG oder WebP?
- Es ist kleiner als ein minimales transparentes PNG, und jeder Browser, jeder E-Mail-Client und jede Bildbibliothek der letzten 35 Jahre kann es lesen.
- Soll ich eine Data-URI oder eine Datei verwenden?
- Eine Data-URI spart eine Anfrage und eignet sich für Platzhalter und CSS. Eine Datei oder ein Endpoint ist nötig, wenn es gerade um die Anfrage selbst geht, wie bei Tracking-Pixeln.
- Welchen Content-Type soll ich senden?
image/gif. ErgänzeCache-Control: no-store, wenn jede Anfrage deinen Server erreichen muss.