El GIF transparente más pequeño ocupa 43 bytes.
Esto es todo. Elige cualquier byte para ver qué hace y luego copia el archivo, descárgalo, enlázalo directamente o sírvelo desde tu propio código.

Qué hace cada byte
Un GIF es una secuencia de bloques. Este tiene siete, y cada color de esta página corresponde a uno de ellos. Selecciona un byte o un bloque para leer su descripción. Los números se guardan en little-endian: el byte menos significativo va primero, así que 01 00 significa 1.
| Bytes | Campo | Significado |
|---|---|---|
| Cabecera Indica al decodificador que es un GIF y qué versión del formato debe esperar. | ||
| 47 49 46 | Firma | Las letras ASCII «GIF». Todo archivo GIF empieza con ellas. |
| 38 39 61 | Versión | «89a». La transparencia requiere 89a; 87a no tiene extensión de control gráfico. |
| Descriptor de pantalla lógica El tamaño del lienzo y cómo está configurada su tabla de colores. | ||
| 01 00 | Ancho del lienzo | 1 px. |
| 01 00 | Alto del lienzo | 1 px. |
| 80 | Indicadores empaquetados | Cuatro ajustes metidos en un solo byte. El bit más alto indica que sigue una tabla de colores global; los tres últimos bits dan su tamaño. |
| 00 | Índice del color de fondo | Entrada 0 de la paleta. Los navegadores la ignoran y muestran lo que hay detrás de la imagen. |
| 00 | Relación de aspecto del píxel | 0 significa píxeles cuadrados, sin corrección. |
| Tabla de colores global La paleta. Los píxeles guardan un índice de esta lista en lugar de un color. | ||
| FF FF FF | Entrada de la paleta | Rojo, verde y azul, un byte cada uno: #ffffff. Dos entradas es la tabla más pequeña que puede tener un GIF. |
| 00 00 00 | Entrada de la paleta | Rojo, verde y azul, un byte cada uno: #000000. Dos entradas es la tabla más pequeña que puede tener un GIF. |
| Extensión de control gráfico Bloque opcional añadido en GIF89a. Aquí hace transparente la entrada 0 de la paleta. | ||
| 21 | Introductor de extensión | 0x21 («!») anuncia un bloque de extensión. |
| F9 | Etiqueta de control gráfico | 0xF9 indica que esta extensión es una extensión de control gráfico. |
| 04 | Tamaño del bloque | Siguen 4 bytes de ajustes. |
| 01 | Indicadores empaquetados | El bit más bajo es el indicador de transparencia. Está activado, así que se usa el índice transparente de abajo. |
| 00 00 | Retardo | 0 centésimas de segundo. Solo importa en animaciones. |
| 00 | Índice del color transparente | La entrada 0 de la paleta se dibuja totalmente transparente. |
| 00 | Terminador de bloque | Un subbloque de longitud cero que cierra el bloque. |
| Descriptor de imagen Dónde se sitúa la imagen en el lienzo y qué tamaño tiene. | ||
| 2C | Separador de imagen | 0x2C («,») inicia una imagen. |
| 00 00 | Izquierda | La imagen empieza a 0 px del borde izquierdo del lienzo. |
| 00 00 | Arriba | La imagen empieza a 0 px del borde superior del lienzo. |
| 01 00 | Ancho de la imagen | 1 px. |
| 01 00 | Alto de la imagen | 1 px. |
| 00 | Indicadores empaquetados | Sin tabla de colores local, sin entrelazado. La imagen usa la paleta global. |
| Datos de imagen Los píxeles, comprimidos con LZW y divididos en subbloques de hasta 255 bytes. | ||
| 02 | Tamaño mínimo de código LZW | 2, así que los códigos comprimidos empiezan con 3 bits de ancho. |
| 02 | Tamaño del subbloque | Siguen 2 bytes de datos comprimidos. |
| 44 01 | Píxeles comprimidos | Códigos LZW empaquetados desde el bit más bajo. Más abajo puedes ver cómo se decodifican. |
| 00 | Terminador de bloque | Un subbloque de longitud cero que cierra el bloque. |
| Marca de fin Un byte que marca el final del archivo. | ||
| 3B | Marca de fin | 0x3B («;») termina el archivo. |
Dentro de los bytes empaquetados
Cada uno de estos tres bytes guarda varios ajustes pequeños. El bit 7 es el de más a la izquierda.
0x800x010x00Cómo dos bytes contienen un píxel
Con un tamaño mínimo de código de 2, el decodificador lee códigos de 3 bits. El código 4 borra la tabla, el código 5 termina la imagen y los códigos 0 a 3 son entradas de la paleta. Los bytes 44 01 se leen desde el bit más bajo:
0x44 010001000x01 00000001
- 001100 = 4Borrado: empezar con una tabla nueva
- 000000 = 0Píxel: entrada 0 de la paleta
- 101101 = 5Fin de la imagen
- 0000000 Bits de relleno sin usar
Las imágenes más grandes usan el mismo truco: cada código nuevo representa una racha un píxel más larga que la anterior, así que un GIF transparente de 1000×1000 ocupa solo 1743 bytes.
¿Puede ser más pequeño?
Sí, si quitas partes cuya ausencia toleran los decodificadores. Pasamos cada variante por tres motores de navegador y por Pillow, y anotamos lo que dibujaron.
| Tamaño | Variante | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | El archivo estándar de esta página. | Transparente | Transparente | Transparente | Transparente |
| 42 | Sin byte final. De todos modos, los decodificadores se detienen al final de los datos. | Transparente | Transparente | Transparente | Transparente |
| 37 | Sin paleta. Sigue siendo válido: la especificación permite que los decodificadores usen su propia paleta, y el índice 0 es transparente de todos modos. | Transparente | Transparente | Transparente | Transparente |
| 36 | Sin paleta ni byte final. | Transparente | Transparente | Transparente | Transparente |
| 35 | Sin bloque de transparencia: el píxel se dibuja con el color 0 de la paleta, blanco. | Blanco | Blanco | Blanco | Blanco |
| 35 | El formato de 1987. No tiene forma de marcar un color como transparente. | Blanco | Blanco | Blanco | Blanco |
| 34 | Bloque de transparencia, pero sin píxeles comprimidos. | Transparente | Transparente | Transparente | Error |
| 33 | Lo mismo, sin el byte final. | Transparente | Transparente | Transparente | Error |
| 29 | Sin paleta y sin transparencia. Cada motor elige su propio color. | Negro | Blanco | Transparente | Negro |
| 26 | Una imagen sin ningún dato comprimido. | Transparente | Transparente | Transparente | Error |
| 14 | Solo cabecera, tamaño del lienzo y byte final. No contiene ninguna imagen. | Transparente | Error | Transparente | Error |
Usa 43 bytes cuando tenga que funcionar en todas partes. 37 bytes sigue siendo un GIF válido y fue transparente en todos los motores que probamos. Por debajo de eso dependes de la tolerancia del decodificador, y el archivo de 29 bytes muestra cómo discrepan los motores.
Comprobado el 23 de septiembre de 2026 con Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.
Crea uno de cualquier tamaño
Transparente o de un color sólido, desde 1×1 hasta 65535×65535. Se genera en tu navegador; no se sube nada.
Enlázalo directamente
Enlaza estos archivos directamente desde cualquier sitio, correo o app. Se sirven desde el edge de Cloudflare con tiempos de caché largos, y CORS está abierto a todos.
- El archivo de 43 bytes
https://emptygif.com/1x1.gif - Cualquier tamaño, transparente
https://emptygif.com/px/300x250.gif - Cualquier tamaño, color sólido
https://emptygif.com/px/300x250/ff5a1f.gif - API JSON: tamaño, base64 y data URI
https://emptygif.com/api/gif?w=300&h=250 - Todos los fragmentos en JSON
https://emptygif.com/snippets.json - Resumen para agentes de IA
https://emptygif.com/llms.txt
Cabeceras de respuesta
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: *Ejemplo
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Los tamaños generados llegan hasta 4096 px por lado. Si tienes mucho tráfico, descarga el archivo y alójalo tú mismo.
Sírvelo desde tu stack
173 fragmentos listos para ejecutar. Elige el tuyo: cada uno responde en la ruta que elijas con una respuesta image/gif. Si cambiaste el tamaño o el color arriba, los fragmentos usan ese 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);
Ejecutamos este fragmento y comparamos los bytes que devolvió. Abrir página
Para qué se usa
- Píxeles de seguimiento y beacons: el servidor registra la petición y responde con la imagen válida más pequeña.
- Marcadores de posición para imágenes con carga diferida, para que la etiqueta
imgsea válida antes de que llegue la fuente real. - Espaciadores de tamaño fijo en correos HTML, donde el soporte de CSS es irregular.
- Tests y mocks que necesitan una imagen real sin tener que incluir una.
Los píxeles de seguimiento son menos fiables de lo que parecen
Apple Mail precarga las imágenes remotas a través de un proxy cuando la Protección de privacidad de Mail está activada, así que una «apertura» puede no haber sido nunca una persona. Gmail también descarga las imágenes a través de su propio proxy y las guarda en caché. Muchos clientes bloquean las imágenes remotas por defecto. Para analítica de páginas, navigator.sendBeacon() o una respuesta 204 No Content suelen encajar mejor que una imagen.
Preguntas frecuentes
- ¿Por qué se llama vacío si tiene un píxel?
- Un GIF debe tener al menos un píxel. Este es de 1×1 y su único color está marcado como transparente, así que no se ve nada.
- ¿Es válido el archivo de 43 bytes?
- Sí. Sigue exactamente la especificación GIF89a, y todos los motores de la tabla de arriba lo dibujan transparente.
- ¿Por qué un GIF y no un PNG o un WebP?
- Es más pequeño que un PNG transparente mínimo, y cualquier navegador, cliente de correo o biblioteca de imágenes de los últimos 35 años puede leerlo.
- ¿Uso un data URI o un archivo?
- Un data URI ahorra una petición y va bien para placeholders y CSS. Hace falta un archivo o un endpoint cuando lo que importa es la propia petición, como en los píxeles de seguimiento.
- ¿Qué Content-Type debo enviar?
image/gif. AñadeCache-Control: no-storesi cada petición tiene que llegar a tu servidor.