2 min read

高性能 2D ベクターグラフィックエンジン Blend2D の Python バインディングをリリースした

Blend2D という高性能 2D ベクターグラフィックエンジンがあります。詳細はウェブページを見て貰えばと思うのですが、CPU だけで軽量かつ高速なライブラリです。

このライブラリを Python から使いたい ... とずっと思っていたのですが、今回 Claude Code と Codex の力を借りて実現しました。

方針としては nanobindscikit-build-coreuv を組み合わせることでビルドコストを下げつつ、あとは必要最低限の機能に抑えることを目的にしました。

対応プラットフォームは Ubuntu x86_64 / arm64 と macOS arm64 と Windows x86_64 。対応 Python は 3.13 / 3.12 / 3.11 とかなり幅広くしました。これは弊社の Python SDK 都合に完全にあわせてます。

リアルタイムな映像生成

自社では超低遅延な音声や映像配信技術を取り扱っているのですが、検証の際「実際のマイクやカメラ」を使ってると再現性がありません。一応動画を用意しておくというのもあるんですがツールで使える動画って y4m という「名前データ」なので訳わからない容量サイズになります。

そこで 自社では、C++ で書かれているツールでは Blend2D を利用してリアルタイムに映像生成をしています。

この「リアルタイムに映像を生成する」って実は凄く大変です。CPU 負荷が高くても良かったり GPU を使っても良かったりするなら話は別です。

ただ、基本的にそんな素敵な環境はありません。なぜなら目的が Python SDK を使って GitHub Actions の一番安価なインスタンス上で利用したいからです。つまり大量の E2E テストで使いたいんです。しょぼいインスタンスで 120fps の映像をテストしたいんです。

Blend2D はこの夢を叶えてくれるのですが、 C++ なので、気軽には使えませんでした。ただ nanobind という Python と C++ を繋げる便利ライブラリがあり、さらにビルド周りが scikit-core-build を使うと楽ができそうというところに至りました。

結果 1 日で動くところまで持って行き、合計 2 日で正式版リリースまでできました。PyPI にも登録済みです。

GitHub - shiguredo/blend2d-py
Contribute to shiguredo/blend2d-py development by creating an account on GitHub.
0:00
/0:07

OpenCV で生成した映像を表示していた例

そして念願の Python SDK との組み合わせで 120fps の映像を作ったりもできました。

540p 120fps の映像を WebRTC 経由で配信出来てた、上は受信してる映像。

Vibe Coding

今回はコードやサンプルは全て Claude Code (Opus 4.1) / Codex (GPT-5 High) の組み合わせで開発しています。リリース周りだけはさすがにある程度手を入れています。

かなり細かく指示したりはしているので、参考にはならないと思いますが、必要なライブラリを 1 日で動くところまで持ってこれたのはとても満足です。

Blend2D

さて、そんな便利な Blend2D ですが、現在資金調達(Founding) をしています。

Funding
Petr Kobalicek’s personal site

もし興味が出たらみてみてください。