Specs
Where the bytes go.
Padding is never appended junk. Each format has a region its own specification reserves for extra data, and that is the only place it is written.
| Format | Padding region | Opens in | Minimum |
|---|---|---|---|
| BIN | The entire file is pseudo-random printable bytes | hex editors like HxD or xxd, and Python's open() in binary mode | 1 B |
| ZIP | A payload file stored inside the archive without compression | Explorer, Finder, 7-Zip and unzip | 368 B |
| CSV | Additional rows, with the final row padded to land on the exact byte | Excel, Sheets, pandas and Python's csv module | 80 B |
| JSON | A trailing string field, so the document still parses | jq, browser devtools, Python's json module and Node's JSON.parse | 60 B |
| SQL | A block comment | psql, mysql, DBeaver and TablePlus | 126 B |
| XLSX | A binary part inside the package, outside the sheet data | Microsoft Excel, LibreOffice Calc, Numbers and openpyxl | 2,439 B |
| XML | An XML comment node | browsers, Python's lxml and Java's built-in XML parser | 114 B |
| DOCX | A binary part declared in [Content_Types].xml, which Word ignores | Microsoft Word, LibreOffice, Google Docs and python-docx | 1,496 B |
| HTML | An HTML comment | Chrome, Firefox, Safari and Edge | 189 B |
| MD | An HTML comment, which Markdown renderers hide | Typora, VS Code, GitHub and static site generators like Jekyll or Hugo | 80 B |
| An unreferenced content stream, the same mechanism PDF writers use for incremental updates | Acrobat, Preview, Chrome, pdf.js and pypdf | 772 B | |
| TXT | Printable ASCII characters | Notepad, TextEdit and VS Code | 1 B |
| JPG | COM comment segments, the field the JPEG spec reserves for free text | standard image viewers, browsers and EXIF-aware tools | 1,927 B |
| PNG | A tEXt metadata chunk with a valid CRC, which decoders skip | Preview, Photoshop, browsers and Pillow | 288 B |
| SVG | An XML comment inside the document | browsers, Illustrator, Figma and Inkscape | 200 B |
| WebP | A custom RIFF chunk, with the container size field corrected afterwards | modern browsers, Photoshop 23+ and libwebp tools | 1,309 B |
| MP3 | An ID3v2 tag sized to absorb the remainder | media players, VLC and ffprobe | 427 B |
| MP4 | A free box, the container’s own reserved-space atom | container parsers and ffprobe — note it carries no video track, so it will not play | 48 B |
| WAV | Audio samples — the whole file is real audio data | media players, Audacity, ffmpeg and Python's wave module | 45 B |
| BAT | Unreachable text after a goto :eof, which cmd.exe never parses | Notepad, VS Code and cmd.exe | 111 B |
| EXE | Trailing bytes after a header that declares zero sections, so a real Windows loader refuses to run it | file managers and antivirus scanners — deliberately never executes | 512 B |
| ISO | The contents of a real README.TXT file inside the disc image | Explorer/Finder disc mount, 7-Zip and any ISO 9660 reader | 43,009 B |