Skip to content

Latest commit

 

History

History
92 lines (63 loc) · 6.91 KB

File metadata and controls

92 lines (63 loc) · 6.91 KB

Changelog

このファイルは Keep a Changelog の体裁に近づけ、利用者向けの差分を記録する。

[1.0.4 / zenpix-wasm 1.1.2] - 2026-08-01

配布説明の修正

  • 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として再生成する。

[1.0.3 / zenpix-wasm 1.1.1] - 2026-08-01

ネイティブresize SIMD

  • 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実行を配布証拠とし、公開後の実機利用は未確認。

[1.0.2 / zenpix-wasm 1.1.0] - 2026-07-22

zenpix 1.0.2

  • 公開説明を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へ既存のLICENSETHIRD_PARTY_LICENSESを同梱した。
  • prepackでTypeScript成果物をclean buildし、古いjs/distをpackしないようにした。

zenpix-wasm 1.1.0

  • 公開済み1.0.0と同じく、package rootのdefault exportをbaseline版raw Emscripten factoryとして維持した。
  • zenpix-wasm/encodercreateAvifEncoder wrapperを追加し、baseline / SIMD成果物を選べるようにした。
  • zenpix-wasm/rawをbaseline版raw factoryの明示的aliasとして追加した。
  • package metadataとREADMEを現在のESM・browser向け成果物に合わせ、既存のLICENSETHIRD_PARTY_LICENSESをtarballへ同梱した。

この更新でroot importをwrapperへ差し替える破壊的変更は行っていない。

[1.0.1] - 2026-05-30

修正

  • Linux 向け libpict.so を vcpkg 静的リンクでビルドするよう CI を変更。 これにより libavif.solibwebp.solibjpeg.solibpng.so 等の システムライブラリへの実行時依存がなくなり、Docker 等の最小イメージでも動作する。

[1.0.0] - 2026-05-25

初回リリース

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。

当時のベンチマーク記録(対 Sharp)

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 は先頭フレームのみ