このファイルは Keep a Changelog の体裁に近づけ、利用者向けの差分を記録する。
- npm tarball内のREADMEとthird-party noticeから、公開前後で真偽が変わる「候補」「未公開」表記を除き、package version・CI検査・公開後検証を別々に記述した。
- native rootと5 optional packageを1.0.4、
zenpix-wasmを1.1.2へ更新した。公開API、native実装、WASM APIは変更しない。 - 1.0.3 / 1.1.1の実装とartifact検証結果は有効だが、immutableなnpm tarball内READMEが公開後も候補表記のまま残るため、説明修正版をpatch releaseとして再生成する。
- scalarの2-pass Lanczos-3を正解基準として残し、RGBAの水平・垂直passにarm64 NEONとx86_64 SSE2の経路を追加した。
- 1 / 2 / 3 channel、未対応CPU、
ZENPIX_ENABLE_SIMD=OFFはscalarへfallbackする。公開API / ABIは変更しない。 - scalar対SIMDのC単体・共有ライブラリFFI・既存RGB / 操作テストを追加した。macOS arm64ではNEON、macOS x64ではRosetta上のSSE2について画素一致を確認した。
- 5 native環境のrelease-candidate workflowでSIMD・強制scalar build/test、共有ライブラリFFI比較、AVIF roundtrip、runtime依存検査、packed Node.js / Bun / Deno / CLI smokeを実行する。scalar対SIMDの全画素比較は最大差0だった。
- GitHub Actionsの決定的RGBA fixtureでは、Apple M1 runnerでraw resizeが1.086〜1.256倍、decode→resize→AVIF全体が1.044〜1.173倍、Intel runnerでそれぞれ1.215〜1.297倍、1.200〜1.326倍だった。RGB fallbackは改善せず、この範囲を一般性能の主張には使用しない。
vcpkg.jsonへbaselineを固定し、5つのnative jobが直前にbuildしたバイナリを対応するoptional packageへ入れてpackするようにした。Gitで無視された既存バイナリはpack入力に使わない。- macOS成果物はcodec依存を静的リンクし、deployment targetを12.0に固定する。release-candidate workflowはmacOS arm64 / x64で外部codec dylib依存がないことと
minos 12.0を検査し、Linuxではglibc baseline、Windowsではruntime importを検査する。 - native tarballのバイナリSHA、runtime依存、Node.js / Bun / Deno API、CLIを各環境で検査し、最後にroot・5 native・WASMの計7 tarballをversion・必須ファイル・license・SHA256で集約検査する。
zenpix-wasmはclean buildでbaseline / SIMDの4成果物がそろわない限りpackを失敗させ、packed tarballをChromiumでencodeする。ライセンス通知と配布検証を修正した1.1.1をnpmへ公開し、registryから再取得したtarballのSHA256一致とbaseline / SIMD browser smokeを確認した。- native 1.0.3のrootと5 optional packageをnpmへ公開した。全packageのregistry metadataとintegrityを確認し、macOS arm64ではregistryから新規installしたAPI / CLIによるAVIF実変換を確認した。他の4 native環境は同一tarballのCI実行を配布証拠とし、公開後の実機利用は未確認。
- 公開説明をCネイティブ画像処理エンジン、TypeScript FFI、CLI、platform optional packageの実装範囲に合わせた。
- Denoの通常経路では
--allow-ffiと--allow-readだけを使い、ZENPIX_LIB上書き時だけ--allow-env=ZENPIX_LIBを必要とする権限処理へ変更した。 - rootと5つのplatform optional packageを1.0.2へ同期し、公開tarballへ既存の
LICENSEとTHIRD_PARTY_LICENSESを同梱した。 prepackでTypeScript成果物をclean buildし、古いjs/distをpackしないようにした。
- 公開済み1.0.0と同じく、package rootのdefault exportをbaseline版raw Emscripten factoryとして維持した。
zenpix-wasm/encoderにcreateAvifEncoderwrapperを追加し、baseline / SIMD成果物を選べるようにした。zenpix-wasm/rawをbaseline版raw factoryの明示的aliasとして追加した。- package metadataとREADMEを現在のESM・browser向け成果物に合わせ、既存の
LICENSEとTHIRD_PARTY_LICENSESをtarballへ同梱した。
この更新でroot importをwrapperへ差し替える破壊的変更は行っていない。
- Linux 向け
libpict.soを vcpkg 静的リンクでビルドするよう CI を変更。 これによりlibavif.so・libwebp.so・libjpeg.so・libpng.so等の システムライブラリへの実行時依存がなくなり、Docker 等の最小イメージでも動作する。
zenpix-c — Cで再実装した画像変換ライブラリ。1.0.0では旧Zig版の主要APIとplatform packageを移行した一方、旧版に任意設定で存在したRGBA SIMD経路は移行していなかった。
decode(): JPEG・PNG・静止画 WebP・AVIF・GIF(先頭フレームのみ)をデコード。JPEG EXIF Orientation 自動適用。decodeHeic(): HEIC/HEIF をデコード(macOS・Linux)。libheif を実行時 dlopen で読み込み、未インストール時は他機能に影響なし。resize(): Lanczos-3 フィルタ。fit: "stretch" | "contain" | "cover"。threadsオプションで並列化。encodeAvif(): AVIF エンコード(quality 0–100、speed 0–10、threads)。encodeWebP(): WebP エンコード(quality、lossless)。encodePng(): PNG エンコード(compression 0–9)。crop(): 矩形切り出し。convert(): decode → crop → resize → encode の一括パイプライン。removeBackground(): 四隅 BFS フラッドフィルで白背景を透過化。flattenBackground(): RGBA → 白背景合成 RGB。roundCorners(): 角丸マスク(px または"full"で完全な円形)。- CLI:
npx zenpixでコマンドライン変換。
Node.js 18+・Bun・Deno 2.x、macOS arm64/x64、Linux x86_64/arm64、Windows x64。
2026-05-25のVPS(Ubuntu 2vCPU)測定では、使用したキャラクターイラスト・厚塗り風景fixtureでSharpを1.2〜1.5倍上回り、CPU user時間はSharpの約40%だった。fixtureを再配布していないため、この数値は当時の条件に限る記録であり、一般性能の主張には使用しない。
- Alpine Linux(musl)非対応(glibc 前提)
- Cloudflare Workers 非対応(CPU 制限)
- HEIC エンコード非対応(HEVC 特許問題)
- アニメーション WebP 非対応
- アニメーション GIF は先頭フレームのみ