Самый маленький прозрачный GIF занимает 43 байта.
Вот он целиком. Выберите любой байт, чтобы узнать, что он делает, а затем скопируйте файл, скачайте его, подключите по прямой ссылке или отдавайте из своего кода.

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==
Что делает каждый байт
GIF — это последовательность блоков. В этом файле их семь, и каждый цвет на странице соответствует одному из них. Выберите байт или блок, чтобы прочитать описание. Числа хранятся в порядке little-endian: младший байт идёт первым, поэтому 01 00 означает 1.
| Байты | Поле | Значение |
|---|---|---|
| Заголовок Сообщает декодеру, что это GIF, и какую версию формата ожидать. | ||
| 47 49 46 | Сигнатура | ASCII-буквы «GIF». С них начинается любой GIF-файл. |
| 38 39 61 | Версия | «89a». Для прозрачности нужна версия 89a; в 87a нет расширения управления графикой. |
| Дескриптор логического экрана Размер холста и устройство его таблицы цветов. | ||
| 01 00 | Ширина холста | 1 px. |
| 01 00 | Высота холста | 1 px. |
| 80 | Упакованные флаги | Четыре настройки, втиснутые в один байт. Старший бит говорит, что далее следует глобальная таблица цветов; три младших бита задают её размер. |
| 00 | Индекс цвета фона | Элемент палитры 0. Браузеры его игнорируют и показывают то, что находится под изображением. |
| 00 | Соотношение сторон пикселя | 0 означает квадратные пиксели без коррекции. |
| Глобальная таблица цветов Палитра. Пиксели хранят не цвет, а индекс в этом списке. | ||
| FF FF FF | Элемент палитры | Красный, зелёный и синий, по байту на каждый: #ffffff. Два элемента — наименьшая таблица, которая может быть у GIF. |
| 00 00 00 | Элемент палитры | Красный, зелёный и синий, по байту на каждый: #000000. Два элемента — наименьшая таблица, которая может быть у GIF. |
| Расширение управления графикой Необязательный блок, появившийся в GIF89a. Здесь он делает элемент палитры 0 прозрачным. | ||
| 21 | Вводный байт расширения | 0x21 («!») объявляет блок расширения. |
| F9 | Метка управления графикой | 0xF9 означает, что это расширение управления графикой. |
| 04 | Размер блока | Число байтов настроек, которые идут следом: 4. |
| 01 | Упакованные флаги | Младший бит — флаг прозрачности. Он установлен, поэтому используется индекс прозрачного цвета, указанный ниже. |
| 00 00 | Задержка | В сотых долях секунды: 0. Важна только для анимации. |
| 00 | Индекс прозрачного цвета | Элемент палитры 0 отрисовывается полностью прозрачным. |
| 00 | Терминатор блока | Подблок нулевой длины, закрывающий блок. |
| Дескриптор изображения Где изображение расположено на холсте и какого оно размера. | ||
| 2C | Разделитель изображения | 0x2C («,») начинает изображение. |
| 00 00 | Слева | Отступ изображения от левого края холста: 0 px. |
| 00 00 | Сверху | Отступ изображения от верхнего края холста: 0 px. |
| 01 00 | Ширина изображения | 1 px. |
| 01 00 | Высота изображения | 1 px. |
| 00 | Упакованные флаги | Нет локальной таблицы цветов, нет чересстрочности. Изображение использует глобальную палитру. |
| Данные изображения Пиксели, сжатые LZW и разбитые на подблоки размером до 255 байт. | ||
| 02 | Минимальный размер кода LZW | 2, поэтому сжатые коды поначалу имеют ширину 3 бит. |
| 02 | Размер подблока | Число байтов сжатых данных, которые идут следом: 2. |
| 44 01 | Сжатые пиксели | Коды LZW, упакованные начиная с младшего бита. Как они декодируются, показано ниже. |
| 00 | Терминатор блока | Подблок нулевой длины, закрывающий блок. |
| Трейлер Один байт, отмечающий конец файла. | ||
| 3B | Трейлер | 0x3B («;») завершает файл. |
Внутри упакованных байтов
Каждый из трёх байтов хранит несколько мелких настроек. Бит 7 — крайний слева.
0x800x010x00Как два байта хранят один пиксель
При минимальном размере кода 2 декодер читает 3-битные коды. Код 4 очищает таблицу, код 5 завершает изображение, а коды с 0 по 3 — это элементы палитры. Байты 44 01 читаются начиная с младшего бита:
0x44 010001000x01 00000001
- 001100 = 4Очистка: начать с новой таблицы
- 000000 = 0Пиксель: элемент палитры 0
- 101101 = 5Конец изображения
- 0000000 Неиспользуемые биты выравнивания
Большие изображения используют тот же приём: каждый новый код обозначает серию на один пиксель длиннее предыдущей, поэтому прозрачный GIF 1000×1000 занимает всего 1 743 байт.
Можно ли меньше?
Да, если выбросить части, без которых декодеры обходятся. Мы прогнали каждый вариант через три браузерных движка и Pillow и записали, что они нарисовали.
| Размер | Вариант | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | Стандартный файл с этой страницы. | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 42 | Без байта-трейлера. Декодеры всё равно останавливаются в конце данных. | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 37 | Совсем без палитры. Всё ещё корректно: спецификация разрешает декодерам использовать свою палитру, а индекс 0 и так прозрачный. | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 36 | Без палитры и без трейлера. | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 35 | Без блока прозрачности: пиксель рисуется цветом 0 из палитры, белым. | Белый | Белый | Белый | Белый |
| 35 | Формат 1987 года. В нём нельзя пометить цвет как прозрачный. | Белый | Белый | Белый | Белый |
| 34 | Блок прозрачности есть, сжатых пикселей нет. | Прозрачный | Прозрачный | Прозрачный | Ошибка |
| 33 | То же самое без трейлера. | Прозрачный | Прозрачный | Прозрачный | Ошибка |
| 29 | Без палитры и без прозрачности. Каждый движок выбирает свой цвет. | Чёрный | Белый | Прозрачный | Чёрный |
| 26 | Изображение вообще без сжатых данных. | Прозрачный | Прозрачный | Прозрачный | Ошибка |
| 14 | Только заголовок, размер холста и трейлер. Изображения в нём нет. | Прозрачный | Ошибка | Прозрачный | Ошибка |
Берите 43 байта, если файл должен работать везде. 37 байт — всё ещё корректный GIF, и он был прозрачным во всех проверенных движках. Ниже вы зависите от снисходительности декодера, а файл в 29 байт показывает, насколько расходятся движки.
Проверено 23 сентября 2026 г.: Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.
Тот же пиксель в других форматах
Самый маленький прозрачный файл 1×1, который нам удалось собрать в каждом формате, проверенный в тех же четырёх движках. Раскройте строку, чтобы увидеть его байты: они окрашены так же, как блоки GIF с той же ролью.
| Размер | Файл | Data URI | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|---|
| 28 | WebP То же без двух байтов выравнивания. WebKit отвергает файлы WebP короче 30 байт.52 49 46 46 14 00 00 00 57 45 42 50 56 50 38 4c 08 00 00 00 2f 00 00 00 10 88 88 08
| 63 | Прозрачный | Прозрачный | Ошибка | Прозрачный |
| 30 | WebP VP8L без потерь. Каждый префиксный код содержит один символ, поэтому пиксели не занимают ни бита, и файл остаётся того же размера вплоть до 16384×16384.52 49 46 46 16 00 00 00 57 45 42 50 56 50 38 4c 0a 00 00 00 2f 00 00 00 10 88 88 08 00 00
| 63 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 43 | GIF GIF в 43 байта из начала этой страницы.47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff 00 00 00 21 f9 04 01 00 00 00 00 2c 00 00 00 00 01 00 01 00 00 02 02 44 01 00 3b
| 82 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 58 | BMP В классическом 40-байтовом заголовке нет маски альфа-канала, поэтому четвёртый байт игнорируется и пиксель везде чёрный.42 4d 3a 00 00 00 00 00 00 00 36 00 00 00 28 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 00 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 102 | Чёрный | Чёрный | Чёрный | Чёрный |
| 62 | SVG Пустой элемент | 85 | Прозрачный | Прозрачный | Прозрачный | Ошибка |
| 67 | PNG Truecolor с альфа-каналом. Единственная строка из нулей сжата вручную и на байт короче, чем у zlib на самой сильной настройке.89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 01 00 00 00 01 08 06 00 00 00 1f 15 c4 89 00 00 00 0a 49 44 41 54 78 01 63 00 01 00 00 05 00 01 36 d0 88 dd 00 00 00 00 49 45 4e 44 ae 42 60 82
| 114 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 70 | ICO Favicon с 32-битным растром и его 1-битной маской AND.00 00 01 00 01 00 01 01 00 00 01 00 20 00 30 00 00 00 16 00 00 00 28 00 00 00 01 00 00 00 02 00 00 00 01 00 20 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00
| 121 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 74 | BMP 56-байтовый заголовок с маской альфа-канала. WebKit такой файл не загружает.42 4d 4a 00 00 00 00 00 00 00 46 00 00 00 38 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 00 00 00 00
| 122 | Прозрачный | Прозрачный | Ошибка | Прозрачный |
| 89 | ICO Favicon с PNG в 67 байт.00 00 01 00 01 00 01 01 00 00 01 00 20 00 43 00 00 00 16 00 00 00 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 01 00 00 00 01 08 06 00 00 00 1f 15 c4 89 00 00 00 0a 49 44 41 54 78 01 63 00 01 00 00 05 00 01 36 d0 88 dd 00 00 00 00 49 45 4e 44 ae 42 60 82
| 145 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 126 | BMP Заголовок V4. WebKit игнорирует его маску альфа-канала и рисует чёрный.42 4d 7e 00 00 00 00 00 00 00 7a 00 00 00 6c 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 42 47 52 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 190 | Прозрачный | Прозрачный | Чёрный | Прозрачный |
| 142 | BMP Заголовок V5; в WebKit результат тот же.42 4d 8e 00 00 00 00 00 00 00 8a 00 00 00 7c 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 42 47 52 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 214 | Прозрачный | Прозрачный | Чёрный | Прозрачный |
| 437 | AVIF То же с субдискретизацией 4:0:0, которая отбрасывает цветовые плоскости.00 00 00 1c 66 74 79 70 61 76 69 66 00 00 00 00 61 76 69 66 6d 69 66 31 6d 69 61 66 00 00 01 6a 6d 65 74 61 00 00 00 00 00 00 00 21 68 64 6c 72 00 00 00 00 00 00 00 00 70 69 63 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 70 69 74 6d 00 00 00 00 00 01 00 00 00 2c 69 6c 6f 63 00 00 00 00 44 00 00 02 00 01 00 00 00 01 00 00 01 a0 00 00 00 15 00 02 00 00 00 01 00 00 01 8e 00 00 00 12 00 00 00 42 69 69 6e 66 00 00 00 00 00 02 00 00 00 1a 69 6e 66 65 02 00 00 00 00 01 00 00 61 76 30 31 43 6f 6c 6f 72 00 00 00 00 1a 69 6e 66 65 02 00 00 00 00 02 00 00 61 76 30 31 41 6c 70 68 61 00 00 00 00 1a 69 72 65 66 00 00 00 00 00 00 00 0e 61 75 78 6c 00 02 00 01 00 01 00 00 00 a7 69 70 72 70 00 00 00 81 69 70 63 6f 00 00 00 14 69 73 70 65 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 0e 70 69 78 69 00 00 00 00 01 08 00 00 00 0c 61 76 31 43 81 00 1c 00 00 00 00 13 63 6f 6c 72 6e 63 6c 78 00 01 00 0d 00 06 80 00 00 00 38 61 75 78 43 00 00 00 00 75 72 6e 3a 6d 70 65 67 3a 6d 70 65 67 42 3a 63 69 63 70 3a 73 79 73 74 65 6d 73 3a 61 75 78 69 6c 69 61 72 79 3a 61 6c 70 68 61 00 00 00 00 1e 69 70 6d 61 00 00 00 00 00 00 00 02 00 01 04 01 02 83 04 00 02 04 01 02 83 05 00 00 00 2f 6d 64 61 74 12 00 0a 04 18 00 06 15 32 08 10 00 00 18 e1 42 72 10 12 00 0a 07 18 00 06 18 08 68 35 32 08 10 00 00 18 e1 42 72 10
| 607 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
| 471 | AVIF То, что записывает libavif при качестве 100: одно изображение AV1 для цвета и одно для альфа-канала в боксах ISO BMFF.00 00 00 20 66 74 79 70 61 76 69 66 00 00 00 00 61 76 69 66 6d 69 66 31 6d 69 61 66 4d 41 31 42 00 00 01 86 6d 65 74 61 00 00 00 00 00 00 00 21 68 64 6c 72 00 00 00 00 00 00 00 00 70 69 63 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 70 69 74 6d 00 00 00 00 00 01 00 00 00 2c 69 6c 6f 63 00 00 00 00 44 00 00 02 00 01 00 00 00 01 00 00 01 c0 00 00 00 17 00 02 00 00 00 01 00 00 01 ae 00 00 00 12 00 00 00 42 69 69 6e 66 00 00 00 00 00 02 00 00 00 1a 69 6e 66 65 02 00 00 00 00 01 00 00 61 76 30 31 43 6f 6c 6f 72 00 00 00 00 1a 69 6e 66 65 02 00 00 00 00 02 00 00 61 76 30 31 41 6c 70 68 61 00 00 00 00 1a 69 72 65 66 00 00 00 00 00 00 00 0e 61 75 78 6c 00 02 00 01 00 01 00 00 00 c3 69 70 72 70 00 00 00 9d 69 70 63 6f 00 00 00 14 69 73 70 65 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 10 70 69 78 69 00 00 00 00 03 08 08 08 00 00 00 0c 61 76 31 43 81 00 0c 00 00 00 00 13 63 6f 6c 72 6e 63 6c 78 00 01 00 0d 00 06 80 00 00 00 0e 70 69 78 69 00 00 00 00 01 08 00 00 00 0c 61 76 31 43 81 00 1c 00 00 00 00 38 61 75 78 43 00 00 00 00 75 72 6e 3a 6d 70 65 67 3a 6d 70 65 67 42 3a 63 69 63 70 3a 73 79 73 74 65 6d 73 3a 61 75 78 69 6c 69 61 72 79 3a 61 6c 70 68 61 00 00 00 00 1e 69 70 6d 61 00 00 00 00 00 00 00 02 00 01 04 01 02 83 04 00 02 04 01 05 86 07 00 00 00 31 6d 64 61 74 12 00 0a 04 18 00 06 15 32 08 10 00 00 18 e1 42 72 10 12 00 0a 08 18 00 06 08 08 68 34 20 32 09 10 00 00 00 07 c8 24 c6 62
| 651 | Прозрачный | Прозрачный | Прозрачный | Прозрачный |
- Сигнатура
- Размер
- Палитра
- Прозрачность
- Контейнер
- Пиксели
- Конец
- Метаданные
- Выравнивание
Самый маленький файл, оказавшийся прозрачным во всех четырёх движках, — WebP: 30 Б, на 13 Б меньше, чем GIF.
Длина data URI в символах: SVG — как URL-кодированный текст, остальные — в base64. Проверено 24 сентября 2026 г.: Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0. AVIF записан libavif 1.4.1.
GIF любого размера
Прозрачный или залитый одним цветом, от 1×1 до 65535×65535. Генерируется в вашем браузере, ничего никуда не загружается.
Прямые ссылки
Ссылайтесь на эти файлы напрямую с любого сайта, из письма или приложения. Они раздаются с edge-серверов Cloudflare с долгим временем кеширования, а CORS открыт для всех.
- Файл в 43 байта
https://emptygif.com/1x1.gif - Любой размер, прозрачный
https://emptygif.com/px/300x250.gif - Любой размер, сплошной цвет
https://emptygif.com/px/300x250/ff5a1f.gif - То же в PNG, WebP или SVG
https://emptygif.com/px/300x250.webp - JSON API: размер, base64 и data URI
https://emptygif.com/api/gif?w=300&h=250 - Все примеры кода в JSON
https://emptygif.com/snippets.json - Сводка для ИИ-агентов
https://emptygif.com/llms.txt
Заголовки ответа
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: *Пример
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Сгенерированные размеры — до 4096 px по каждой стороне. Если у вас большой трафик, пожалуйста, скачайте файл и разместите его у себя.
Отдавайте из своего стека
Готовых к запуску примеров: 191. Выберите свой: каждый отвечает по выбранному вами пути ответом image/gif. Если выше вы изменили размер или цвет, примеры используют этот GIF.
JavaScript & TypeScript
- Next.js (App Router)
- Hono
- Bun.serve
- Elysia
- Deno.serve
- SvelteKit
- Nuxt (Nitro server route)
- Astro
- React Router (framework mode, ex-Remix)
- TanStack Start
- SolidStart
- Hono on Bun
- Hono on Deno
- srvx (universal fetch server)
- Qwik City
- RedwoodSDK
- Angular SSR (Express server.ts)
- Fresh
- Oak
- Encore.ts
- NestJS
- Fastify
- Express
- Node.js standard library (node:http)
- Koa
- hapi
- AdonisJS
Edge & serverless
- Cloudflare Workers
- Cloudflare Workers (Rust, workers-rs)
- Cloudflare Pages Functions
- Spin (Rust, WASI HTTP component)
- 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
Go
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);
Мы запустили этот пример и сравнили байты, которые он вернул. Открыть страницу
Для чего он нужен
- Пиксели отслеживания и маяки (beacons): сервер записывает запрос в лог и отвечает самым маленьким корректным изображением.
- Заглушки для изображений с ленивой загрузкой, чтобы тег
imgбыл корректным до того, как придёт настоящий источник. - Распорки фиксированного размера в HTML-письмах, где поддержка CSS неполная.
- Тесты и моки, которым нужно настоящее изображение, но без отдельного файла.
Пиксели отслеживания менее надёжны, чем кажется
Apple Mail заранее загружает удалённые изображения через прокси, когда включена защита конфиденциальности в Почте, так что за «открытием» может вообще не стоять человек. Gmail тоже загружает изображения через собственный прокси и кеширует их. Многие клиенты по умолчанию блокируют удалённые изображения. Для аналитики страниц navigator.sendBeacon() или ответ 204 No Content часто подходят лучше, чем изображение.
Вопросы и ответы
- Почему он называется пустым, если в нём есть пиксель?
- В GIF должен быть хотя бы один пиксель. У этого размер 1×1, а его единственный цвет помечен как прозрачный, поэтому ничего не видно.
- Корректен ли файл в 43 байта?
- Да. Он в точности следует спецификации GIF89a, и все движки из таблицы выше отрисовывают его прозрачным.
- Почему GIF, а не PNG или WebP?
- Он меньше минимального прозрачного PNG, и его прочитает любой браузер, почтовый клиент и библиотека для работы с изображениями за последние 35 лет.
- Что использовать: data URI или файл?
- Data URI экономит запрос и подходит для заглушек и CSS. Файл или эндпоинт нужен, когда смысл именно в самом запросе, как у пикселей отслеживания.
- Какой Content-Type отправлять?
image/gif. ДобавьтеCache-Control: no-store, если каждый запрос должен доходить до вашего сервера.