Add your file
Choose or drop a .ogg, .oga, or .opus file. You can paste the contents instead.
Choose an .ogg, .oga or .opus file and the inspector walks every Ogg page in order, reassembles packets across page boundaries and identifies each logical stream from the magic bytes of its first packet: Opus, Vorbis, FLAC, Theora, or an unknown stream shown with a hex preview instead of a guess. It decodes the Opus header (OpusHead: version, channels, pre-skip, input sample rate, output gain, channel mapping) and the Vorbis identification header (channels, sample rate, minimum, nominal and maximum bitrate), reads the FLAC and Theora identification fields, and lets you read Ogg Vorbis comment tags: the vendor string and every comment in file order. Embedded cover art (METADATA_BLOCK_PICTURE) is described by picture type, MIME type and declared size, but never shown. Per-stream duration comes from the last granule position, and chained or multiplexed files are reported link by link. Page CRC-32 values can be recomputed and marked match or mismatch. A JSON report can be downloaded with the layout, chain links, each stream's identification header, comments and duration, plus the page, CRC-mismatch and resync counts; the per-page list itself stays in the on-screen page table and is not part of the download. This tool reads Ogg page and header structure only: it never decodes or plays audio, and comment tags are self-declared by whoever wrote the file.
or drop a file here
Choose or drop a .ogg, .oga, or .opus file. You can paste the contents instead.
The file is read and parsed in this browser — nothing is uploaded.
Look over what came back, then copy it, download it, or move on.
Want to know how files are handled? Read the privacy notice →
Drop the .ogg, .oga or .opus file onto the tool and it lists every page, each logical stream, the decoded identification header, the comment tags and a derived duration. Nothing plays; you get a structural readout. Start with the Streams table: it names the codec detected from the first packet's magic bytes, the channel count, the sample rate and whether the stream ended with an end-of-stream page.
Open the Comments table: it shows the vendor (encoder) string first, then every OpusTags or Vorbis comment in file order with the field name as written, an upper-cased copy and the value. Each row is marked self-declared and with its encoding status, so a value that is not valid UTF-8 is flagged with the failing byte offset rather than shown as clean text. A cover-art comment is summarised by picture type, MIME and size only.
No. The file is read by script inside this browser tab and the inspection itself makes no network request, so the audio, tags and page list never leave your device. Nothing is written to local storage or cookies either: reload the page and the tool is empty again, which also means a result you want to keep must be saved with the JSON download.
Open this page in Safari, Chrome or Firefox and pick the file; on iPhone or iPad choose it from the Files app. No player or codec pack is needed because nothing is decoded. The whole file is read into memory, so a file close to the 256 MiB ceiling is more comfortable on a desktop than on an older phone.
‘Not an Ogg file’ means the bytes ‘OggS’ appear nowhere in it, which usually means another format was renamed, such as an MP4, M4A, MP3 or WebM file. ‘No capture pattern’ means ‘OggS’ exists but not within the first 64 KiB, or a later gap between pages is larger than 64 KiB. The type is always judged from the bytes, never from the extension.
It means the last page header promises more bytes than the file contains, typically after an interrupted download or copy. Every page before that point is still listed with its streams and tags, and the warning gives the byte offset where reading stopped. The tool does not repair the file; comparing that offset with the expected file size tells you how much is missing.
Files up to 268,435,456 bytes (256 MiB) are accepted, and reading stops beyond 64 logical streams or at a packet spread over more than 512 pages. Up to 250,000 page records are kept; past that, pages are still counted and checked but not listed. The page table itself shows 500 rows at a time, and each comment header lists up to 1,024 comments.
Type a page index into the ‘First page to show’ option and the table re-renders the 500 pages starting there. The two page-table stats show which range is currently visible. This keeps files with tens of thousands of pages responsive, since payload bytes are never put on the page; only header fields such as offset, granule position, sequence number and CRC are shown.
No. An Ogg CRC is a checksum against accidental change, so a mismatch only says that page's bytes differ from the value written in its header. Causes include tag editors that forgot to update the checksum, transfer errors or buggy muxers. The table lists both values with a ‘structural check only’ note, and this tool gives no malware or safety verdict either way.
No. COPYRIGHT, LICENSE and ORGANIZATION are plain text that anyone can type into a file, and the inspector shows them labelled self-declared without checking them against anything. They can point you to a rights holder or licence to look up, but whether you may redistribute the audio has to be confirmed with that source, not with the tag.
Duration is computed from the last granule position: for Opus, (granule − pre-skip) ÷ 48,000; for Vorbis and FLAC, granule ÷ declared sample rate. A stream that never reached an end-of-stream page is flagged as not terminated. Theora and unknown streams get no duration, and a stream that does not start at granule 0, such as a cut recording, includes that starting offset.
All three use the same Ogg page container; the extension only hints at the content. .opus normally holds Opus audio, .oga is audio-only Ogg, and .ogg is used for Vorbis and much else. The inspector ignores the extension and types each stream from its first packet, so an .opus file that really holds Vorbis is reported as Vorbis.