सबसे छोटा ट्रांसपेरेंट GIF 43 बाइट का होता है।
पूरी फ़ाइल बस इतनी ही है। कोई भी बाइट चुनें और देखें कि वह क्या करता है, फिर फ़ाइल कॉपी करें, डाउनलोड करें, हॉटलिंक करें, या अपने कोड से सर्व करें।

हर बाइट क्या करता है
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 इस्तेमाल न होने वाले पैडिंग बिट
बड़ी इमेज में भी यही तरकीब काम करती है: हर नया कोड पिछले कोड से एक पिक्सेल लंबे रन को दर्शाता है, इसलिए 1000×1000 का ट्रांसपेरेंट GIF सिर्फ़ 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 से 65535×65535 तक। यह आपके ब्राउज़र में ही बनता है; कुछ भी अपलोड नहीं होता।
हॉटलिंक करें
किसी भी साइट, ईमेल या ऐप से इन फ़ाइलों को सीधे लिंक करें। ये Cloudflare के edge से लंबे कैश समय के साथ सर्व होती हैं, और CORS सबके लिए खुला है।
- 43 बाइट की फ़ाइल
https://emptygif.com/1x1.gif - कोई भी साइज़, ट्रांसपेरेंट
https://emptygif.com/px/300x250.gif - कोई भी साइज़, ठोस रंग
https://emptygif.com/px/300x250/ff5a1f.gif - JSON API: साइज़, base64 और data URI
https://emptygif.com/api/gif?w=300&h=250 - सभी स्निपेट JSON में
https://emptygif.com/snippets.json - AI एजेंट्स के लिए सारांश
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 तक होते हैं। अगर आपके यहाँ भारी ट्रैफ़िक है, तो कृपया फ़ाइल डाउनलोड करके ख़ुद होस्ट करें।
अपने स्टैक से सर्व करें
173 स्निपेट, चलाने के लिए तैयार। अपना चुनें: हर स्निपेट आपके चुने पाथ पर image/gif रिस्पॉन्स देता है। अगर आपने ऊपर साइज़ या रंग बदला है, तो स्निपेट वही 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);
हमने यह स्निपेट चलाया और इसके लौटाए बाइट्स की तुलना की। पेज खोलें
इसका इस्तेमाल किसलिए होता है
- ट्रैकिंग पिक्सेल और बीकन: सर्वर रिक्वेस्ट लॉग करता है और सबसे छोटी वैलिड इमेज से जवाब देता है।
- lazy-load होने वाली इमेज के प्लेसहोल्डर, ताकि असली सोर्स आने से पहले भी
imgटैग वैलिड रहे। - HTML ईमेल में फ़िक्स्ड साइज़ के स्पेसर, जहाँ CSS सपोर्ट अधूरा है।
- टेस्ट और मॉक, जिन्हें असली इमेज चाहिए, पर कोई इमेज फ़ाइल साथ रखे बिना।
ट्रैकिंग पिक्सेल उतने भरोसेमंद नहीं, जितने दिखते हैं
Mail Privacy Protection ऑन होने पर Apple Mail रिमोट इमेज को प्रॉक्सी के ज़रिए पहले ही लोड कर लेता है, इसलिए हो सकता है कि कोई “open” किसी इंसान ने किया ही न हो। Gmail भी इमेज अपने प्रॉक्सी से फ़ेच करके कैश करता है। कई क्लाइंट रिमोट इमेज डिफ़ॉल्ट रूप से ब्लॉक करते हैं। पेज एनालिटिक्स के लिए इमेज के बजाय अक्सर navigator.sendBeacon() या 204 No Content रिस्पॉन्स बेहतर रहता है।
सवाल
- पिक्सेल होते हुए भी इसे empty क्यों कहते हैं?
- GIF में कम से कम एक पिक्सेल होना ज़रूरी है। यह 1×1 है और इसका इकलौता रंग ट्रांसपेरेंट मार्क किया गया है, इसलिए कुछ नहीं दिखता।
- क्या 43 बाइट की फ़ाइल वैलिड है?
- हाँ। यह GIF89a स्पेसिफ़िकेशन का पूरी तरह पालन करती है, और ऊपर की टेबल का हर इंजन इसे ट्रांसपेरेंट ड्रॉ करता है।
- PNG या WebP के बजाय GIF क्यों?
- यह सबसे छोटे ट्रांसपेरेंट PNG से भी छोटा है, और पिछले 35 सालों का हर ब्राउज़र, ईमेल क्लाइंट और इमेज लाइब्रेरी इसे पढ़ सकती है।
- data URI इस्तेमाल करूँ या फ़ाइल?
- data URI एक रिक्वेस्ट बचाता है और प्लेसहोल्डर व CSS के लिए सही है। जब रिक्वेस्ट ही असली मक़सद हो, जैसे ट्रैकिंग पिक्सेल में, तब फ़ाइल या endpoint चाहिए।
- कौन-सा Content-Type भेजूँ?
image/gif। अगर हर रिक्वेस्ट का आपके सर्वर तक पहुँचना ज़रूरी है, तोCache-Control: no-storeजोड़ें।