JPEG's APP1, APP13 and COM markers, explained
Published 19 August 2026
Every piece of metadata a JPEG carries lives inside one of a handful of marker segments — numbered slots the format reserves for exactly this purpose. Knowing what each one is actually for is the difference between reading a tag name off a list and understanding what a file is telling you.
How a marker segment is structured
Every JPEG marker follows the same shape: a two-byte marker code starting with 0xFF, a two-byte big-endian length, then a payload of that length. Markers in the APPn range —0xFFE0 through 0xFFEF, sixteen slots numbered APP0 to APP15 — are reserved by the JPEG standard for application-specific data, which is deliberately vague: the standard doesn't say what goes in them, only that vendors can use them. What actually identifies a segment's contents is a NUL-terminated ASCII string at the start of its payload — Exif, ICC_PROFILE, Photoshop 3.0, and so on — not the marker number itself. Two segments can both be APP1 and carry completely different things.
APP1: EXIF and XMP, sharing one slot
APP1 is the most overloaded marker in ordinary use, and it's genuinely common for a single JPEG to carry two separate APP1 segments at once — one identified by the string Exif\0\0, holding a complete embedded TIFF structure (see what is EXIF data? for what's inside it), and a second, unrelated APP1 identified by http://ns.adobe.com/xap/1.0/, holding an XMP packet. XMP is Adobe's metadata mechanism: RDF/XML rather than TIFF tags, syntactically nothing like the EXIF block sitting in the segment next to it, and frequently duplicating the same author, copyright and timestamp fields under different key names. A tool that reads one APP1 segment and stops can miss the other entirely — they share a marker number, not a format.
APP2: the ICC colour profile
Identified by the string ICC_PROFILE, this segment carries the embedded colour profile that tells a display or printer how to interpret the file's colour values correctly. It's not identifying data about you — it's rendering data about the file — which is why it's kept by default on this site rather than stripped along with everything else. Large ICC profiles are sometimes split across multiple APP2 segments and reassembled in order, since a single segment's payload is capped at 65,533 bytes by the two-byte length field every marker uses.
APP13: Photoshop and IPTC
Identified by the string Photoshop 3.0, APP13 carries a sequence of Photoshop "image resource blocks" — and one of those blocks, by convention, embeds a complete IPTC record: captions, credits, keywords and byline fields defined by a captioning standard that predates JPEG itself, going back to newswire photo transmission in the 1990s. Cameras rarely write to APP13 directly; it's overwhelmingly an editing-software artifact, which makes it a reliable signal that a file has been through Photoshop or a compatible tool at some point in its history, independent of whatever the camera itself recorded.
APP14: the Adobe colour-transform flag
Identified by the string Adobe (not NUL-terminated — the version bytes follow directly), APP14 is small and easy to dismiss as metadata, but it carries the colour transform flag that tells a decoder whether the image's colour data is stored as YCCK, YCbCr or raw CMYK. Strip it from a CMYK JPEG without accounting for that and the decoded colours come out wrong — not corrupted, just wrong — which is why it's kept by default here rather than swept up with the rest.
COM: the odd one out
COM (0xFFFE) isn't an APPn marker at all — it sits outside the APP0-APP15 range entirely, in its own reserved slot — but it carries the same category of risk: free-text comments, with no fixed format and no required identifier string, that any tool along a file's history could have written. There's nothing structural to recognise here beyond "this marker means comment," which is exactly why it's removed unconditionally.
What about APP3 through APP12, and APP15?
Vendors have used slots in this range for their own private data over JPEG's history, and there's no complete public registry of what's used what for — a segment identified as FPXR (FlashPix, an older embedded-preview format some cameras still write) is a real example that shows up despite carrying no widely documented meaning. Rather than maintaining a list of known-bad segments and missing whatever isn't on it, an unrecognised APPn segment is removed by default the same way an unrecognised PNG chunk is — the JPG tool's own page covers that default-deny policy in more detail.
Reading a real file
The fastest way to see all of this at once is a real dump: drop a photo into the JPG cleaning tool and every segment it finds is listed and explained before anything is touched, ranked by what it actually reveals rather than by marker number.