The first thing to know about WebP on macOS is that you do not need a plugin to view it. Since macOS 11 Big Sur, Quick Look, Preview and Safari all support WebP natively.
Conversion needs more care. The built-in sips command can read WebP but cannot write it, so WebP → JPEG works while JPEG → WebP does not. Writing requires a separate tool.
This article was published in 2024 and revised in September 2026. The original said macOS supported WebP natively and then walked through installing a Quick Look plugin—contradictory advice. It has been rewritten after testing on macOS 26.5.1.
- Plugins such as WebPQuickLook are unnecessary on Big Sur and later
- Photoshop has supported WebP natively since 23.2, so the WebPShop plugin is generally not needed either
- The step piping a script into a shell with
curl ... | shwithout verifying its source has been removed on safety grounds
Sponsored
What WebP is
A Google image format that reaches comparable quality at a smaller file size than JPEG or PNG.
| Feature | Detail |
|---|---|
| Compression | Roughly 25–35% smaller than equivalent-quality JPEG |
| Lossless | Supported (a PNG replacement) |
| Lossy | Supported (a JPEG replacement) |
| Transparency | Alpha channel, retained even in lossy mode |
| Animation | Supported (a GIF replacement) |
Keeping transparency in lossy mode is the decisive difference from JPEG. Images that had to be PNG “because they need transparency” can now be much smaller.
Native support on macOS
From macOS 11 Big Sur (2020) onwards, viewing works with nothing installed.
| macOS version | Quick Look / Preview / Safari |
|---|---|
| 10.15 Catalina and earlier | Not supported |
| 11 Big Sur and later | Supported |
Big Sur shipped in 2020, so every currently supported version of macOS handles WebP. Instructions telling you to install WebPQuickLook are written for Catalina and earlier.
Checking
Select a WebP file in Finder and press space. If it renders, you are fine. Double-clicking opens it in Preview.
If it does not render, the cause is not a missing plugin but one of:
- A corrupt file (a
.webpextension on something else) - A stale Quick Look cache
qlmanage -r
qlmanage -r cache
Sponsored
sips: reads WebP, cannot write it
macOS ships with sips for image processing. There is an important constraint.
In the format list, writable formats are marked Writable.
sips --formats
com.adobe.pdf pdf Writable
org.webmproject.webp webp ← no Writable
public.jpeg jpeg Writable
public.png png Writable
WebP is not marked Writable. It is read-only. (Verified on macOS 26.5.1.)
WebP → JPEG / PNG (works)
# WebP to JPEG
sips -s format jpeg photo.webp --out photo.jpg
# to PNG, to keep transparency
sips -s format png photo.webp --out photo.png
# with a quality setting (0–100)
sips -s format jpeg -s formatOptions 85 photo.webp --out photo.jpg
To convert a folder:
for f in *.webp; do
sips -s format jpeg "$f" --out "${f%.webp}.jpg"
done
JPEG / PNG → WebP (does not work)
sips -s format webp photo.png --out photo.webp
Error: Can't write format: org.webmproject.webp
Error 13: an unknown error occurred
sips cannot do this direction. Use the tool below.
Writing WebP with cwebp
Google’s official command-line tool, available through Homebrew.
brew install webp
This gives you cwebp (encode) and dwebp (decode).
# PNG or JPEG to WebP at quality 80
cwebp -q 80 photo.png -o photo.webp
# lossless, as a PNG replacement
cwebp -lossless photo.png -o photo.webp
# lossy while preserving transparency
cwebp -q 80 -alpha_q 100 logo.png -o logo.webp
# back to PNG
dwebp photo.webp -o photo.png
Batch conversion:
for f in *.png *.jpg; do
[ -e "$f" ] || continue
cwebp -q 80 "$f" -o "${f%.*}.webp"
done
Animated GIFs and image sequences are covered too.
# GIF to animated WebP
gif2webp animation.gif -o animation.webp
# numbered frames to animated WebP
img2webp -d 100 frame*.png -o animation.webp
Choosing a quality value
-q |
Use for |
|---|---|
| 90–100 | Photographic work, images that get enlarged |
| 75–85 | Web delivery. The practical range |
| 60–75 | Thumbnails, background images |
WebP quality numbers do not mean the same thing as JPEG quality numbers. Carrying “I used 85 for JPEG” straight across can give you larger files than expected. Check the output size.
Sponsored
Converting with Python
If you would rather not install a command-line tool, Pillow works.
pip install Pillow
from pathlib import Path
from PIL import Image
for path in Path('.').glob('*.png'):
img = Image.open(path)
img.save(path.with_suffix('.webp'), 'WEBP', quality=80)
Transparent PNGs can fail depending on their mode. Normalise the mode first to be safe.
img = Image.open(path)
if img.mode in ('P', 'LA'):
img = img.convert('RGBA')
img.save(path.with_suffix('.webp'), 'WEBP', quality=80)
Image processing in Python is also covered in building an image-compression GUI in Python.
WebP in Photoshop
Photoshop 23.2 (February 2022) and later open and save WebP without a plugin. It appears in the Save As format list.
The WebPShop plugin is still relevant only if:
- You are on Photoshop 23.1 or earlier
- You need animated WebP
- You want a preview while encoding
For ordinary still images, no plugin is required.
Things to watch when converting
Lossy or lossless
| Source | Recommended | Why |
|---|---|---|
| Photographs (JPEG) | Lossy (-q 80) |
Already lossy; further loss is acceptable |
| Logos and diagrams (PNG) | Lossless | Lossy blurs the edges |
| Screenshots | Lossless | Text becomes hard to read |
Lossy conversion visibly smudges text and thin lines. Judge by the content, not the source format.
JPEG to WebP compounds the loss
Converting an already-compressed JPEG applies a second round of loss. Where possible, export WebP from the original—RAW, PSD or an uncompressed PNG.
Keep the originals
Back up before running a batch script. The scripts above do not delete sources, but they will overwrite an existing file of the same name in the output.
Using it on the web
For a fallback on older environments, use <picture>.
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" width="800" height="600" alt="Description" loading="lazy">
</picture>
Put loading="lazy", width and height on the <img>, not on <source>—the <img> makes the decision. See native lazy loading in HTML.
That said, WebP is supported by every modern browser, so a single <img> is enough unless you are supporting old environments.
Summary
- macOS 11 Big Sur and later view WebP natively. No plugin needed
- If it will not display, rebuild the cache with
qlmanage -r cache sipsreads WebP but cannot write it. WebP → JPEG yes, JPEG → WebP no- Install
cwebpwithbrew install webpto encode - Photographs at
-q 80; logos and screenshots with-lossless - Photoshop 23.2 and later support WebP natively. WebPShop is largely unnecessary
- Converting from JPEG compounds the loss—export from the original where you can
- Keeping transparency in lossy mode is WebP’s real advantage
On image optimisation generally, see building an image-compression GUI in Python.