使い方

プロキシを起動する

待ち受けるアドレスとアップストリームサーバーの URL を指定して Manael を起動します。

manael -http=:8080 -upstream_url=http://localhost:9000

JPEG を WebP に変換する

Manael はクライアントが Accept リクエストヘッダーで WebP のサポートを示している場合、JPEG および PNG 画像を自動的に WebP に変換します。プロキシを起動する以外に設定は不要です。

JPEG 画像を WebP として受け取るには、Accept ヘッダーに image/webp を含めてリクエストします。

curl -sI -H "Accept: image/webp" http://localhost:8080/image.jpg

変換が成功すると、レスポンスに Content-Type: image/webp が含まれます。

HTTP/1.1 200 OK
Content-Type: image/webp
Vary: Accept
...

クライアントが Accept ヘッダーに image/webp を含めない場合、元の画像がそのまま返されます。

画像を AVIF に変換する

Manael は JPEG 画像を AVIF に変換することもできます。AVIF 変換はデフォルトで無効になっており、MANAEL_ENABLE_AVIF 環境変数で有効にする必要があります。

MANAEL_ENABLE_AVIF=true manael -http=:8080 -upstream_url=http://localhost:9000

AVIF が有効で、クライアントが Accept ヘッダーに image/avif を含めている場合、Manael は対象画像を AVIF に変換します。

curl -sI -H "Accept: image/avif" http://localhost:8080/image.jpg

変換が成功すると、Content-Type: image/avif が返されます。

HTTP/1.1 200 OK
Content-Type: image/avif
Vary: Accept
...

注意: PNG ソース画像への AVIF 変換は、互換性とパフォーマンスを優先するために意図的に無効化されています。PNG 画像はクライアントが対応している場合に引き続き WebP に変換されます。

アニメーション PNG (APNG) のパススルー

Manael はアニメーション PNG (APNG) ファイルを自動的に検出し、変換せずにそのままクライアントへ送信します。APNG を静止画の WebP や AVIF に変換するとアニメーションデータが失われるため、Accept ヘッダーの内容に関わらず元の APNG がそのまま返されます。

Content-Disposition ヘッダーの更新

Manael が画像を別フォーマットに変換した際、レスポンスの Content-Disposition ヘッダーに含まれるファイル名の拡張子を新しいフォーマットに合わせて自動的に更新します。たとえば、アップストリームのレスポンスに次のヘッダーが含まれる場合:

Content-Disposition: attachment; filename="photo.jpg"

WebP に変換されると、Manael はヘッダーを次のように更新します:

Content-Disposition: attachment; filename="photo.webp"

AVIF に変換した場合も同様に拡張子が .avif に更新されます。

高度な設定

環境変数

Manael はコマンドラインフラグに加えて、環境変数による設定もサポートしています。

環境変数 対応するフラグ 説明
MANAEL_UPSTREAM_URL -upstream_url アップストリーム画像サーバーの URL。
PORT -http 待ち受けるポート番号(:<PORT> の形式で使用されます)。
MANAEL_ENABLE_AVIF true に設定すると AVIF 変換が有効になります。

-upstream_url フラグと MANAEL_UPSTREAM_URL の両方が指定されている場合、フラグが優先されます。