Drop a WebP. Any size.
safe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQsafe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQ
“WebP” covers three very different files. A lossy
WebP is a single VP8 video key frame: the encoder already threw detail away, and
no converter can bring it back. A lossless WebP (VP8L) keeps
every pixel, often as a small colour palette. Either can carry an alpha channel,
and either can be animated. OmniViewer reads the bitstream
headers first and says which one you have. For a lossy file it reads the
quantizers the encoder chose, using a real VP8 boolean decoder, and turns them
back into the -q libwebp would have been given. Then the
CONVERT tab can tell you what each conversion costs. PNG
reproduces exactly what you see but is much larger for a photo. JPG at about the
source quality is the honest equivalent. A palette image wants PNG. Every card
shows the exact size of its result before you download it.
An animated WebP is a canvas and a list of ANMF frames. Each one is
a rectangle somewhere on the canvas with its own duration, a blend rule
(alpha-blend over what is there, or replace it) and a dispose rule
(leave it, or clear it before the next frame). Most frames after the first are
small patches, so you cannot export “frame 12” by decoding frame 12
alone. The FRAMES tab cuts each frame out of the file, decodes
it with your browser’s own WebP decoder, and composites it the way the
spec says, the same way a browser does when it plays the file. Step with the
arrow keys, scrub the timeline, see the rectangle each frame repaints, save any
frame as a PNG, or convert the whole animation to an animated PNG that keeps full
colour and transparency, which GIF cannot.
An extended WebP can carry an EXIF chunk with the camera, the time
and the GPS position, an XMP packet that often
repeats them, and a C2PA content credential. Image generators use
that last one to sign “a model made this”. The
METADATA tab reads all of them, and every value points at its
own bytes in the hex pane beside it. The clean copy is a rewrite rather than a
blanking: the chunks are removed, the VP8X flags that announced them
are corrected, and the image data is copied through byte for byte, so nothing is
re-encoded. Read
inside a WebP file: RIFF chunks, VP8, VP8L and animation.
WebP is a RIFF file, and every RIFF size field is 32 bits, so a WebP cannot be
larger than 4 GiB. VP8 and VP8L store width and height in 14 bits, so no
single image is wider than 16,383 pixels. A WebP gets big in two ways: a huge
lossless still or a long animation. OmniViewer reads both by stepping from chunk
header to chunk header and skipping the image data by its declared size. A
50,000-frame animation is indexed from its frame headers without decoding a
pixel, and frames are decoded one at a time when you look at them. Detection is
by the RIFF…WEBP signature, never the extension. Powered by
the same engine as fastjsonviewer.com
and hugecsv.com; OmniViewer opens
every file format.
No. OmniViewer is a static page with no server-side processing. Your WebP is decoded by your own browser and every conversion is encoded by it too. The clean copy is assembled from byte slices of your original file. Nothing leaves your computer.
Drop the file and open the CONVERT tab. Choose PNG for an exact copy with transparency kept, or JPG for a smaller file; the JPG quality starts near the quality the WebP was saved at, and transparent areas are filled with a colour you choose. Click Convert and the card shows the exact size of the result before you download it. An animated WebP converts the frame you picked on the FRAMES tab, or the whole animation to an animated PNG.
OmniViewer reads the bitstream and says. A lossy WebP stores a VP8 key frame (a "VP8 " chunk); a lossless one stores a VP8L bitstream. The info bar and the CONVERT tab name which one you have, whether it is a palette image, whether it has alpha and whether that alpha was itself stored lossily. An animated WebP can mix both, frame by frame, and STATS counts them.
A WebP does not store its quality setting; it stores the quantizers that setting produced. OmniViewer reads them from the VP8 frame header with a real boolean decoder, weights the four segment quantizers by how much of the image each covers, and inverts libwebp’s own quality curve. Measured against cwebp, it lands within one point of the -q used with noise shaping off and within two or three with it on, which is the default. Encoders that do not use libwebp’s curve read differently, so the number is shown as approximate.
Open the FRAMES tab. Step with the arrow keys, play with the space bar or drag the timeline; each frame is cut out of the file, decoded by your browser and composited with the blend and dispose rules the spec defines, so what you see is exactly what a browser shows at that moment. Save frame as PNG downloads the composited frame. To keep the whole animation, CONVERT turns it into an animated PNG with the same timings and loop count.
Yes. On the CONVERT tab, the GIF card writes every frame with its timing and loop count, each frame with its own 256-colour palette. GIF is limited to 256 colours per frame and on/off transparency, so a photographic animation loses detail and usually comes out bigger; if the destination plays animated PNG, the APNG card keeps every pixel and every level of transparency.
It can. An extended WebP may carry an EXIF chunk with the camera, the date and the GPS position, an XMP packet, and a C2PA content credential. METADATA shows them all and the info bar flags a GPS position as soon as the file opens. Clear identifying, or Download clean copy on the CHUNKS tab, writes a copy with those chunks removed and the VP8X header corrected; the image data is copied byte for byte, so nothing is re-encoded and no quality is lost.
Any WebP there is. The format itself stops at 4 GiB, because every RIFF size field is 32 bits, and at 16,383 pixels a side. OmniViewer reads the structure from the chunk headers alone, so opening a file costs a handful of small reads whatever its size, and an animation with tens of thousands of frames is indexed without decoding any of them. The preview and conversions are decoded by your browser, so their limit is its memory; the CHUNKS, METADATA, HEX and STATS tabs do not depend on that.