Browse by section

LIFE 日本語

Effortlessly Handle WebP Files on Mac: Quick Look & Conversion Methods

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 ... | sh without 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 .webp extension 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
  • sips reads WebP but cannot write it. WebP → JPEG yes, JPEG → WebP no
  • Install cwebp with brew install webp to 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.