🎨 変換エンジン
Chromium(Playwright)で実レンダリングして座標・寸法・スタイルを実測し、結果をネイティブな PowerPoint 要素として再構成します。
テキスト
- run 単位の色・太字・斜体・下線・取消線・字間・行送り
- CJK 混在時のフォント自動切替
- 実測行数ベースのテキストボックス高さ
図形・装飾
- 背景色・枠線・角丸・影・回転(
transform-origin対応) - linear / radial グラデーション(OOXML gradFill 直接挿入)
画像
- data URI 画像、object-fit cover crop / contain の非中央 object-position
- SVG・canvas は PNG 化して保持
- 外部 URL は取得せず、ガイダンス警告+編集可能プレースホルダー
表・リスト
- セル内のインライン装飾(太字・色付き等)を編集可能な run のまま出力
- ネストしたリストのレベル別番号・ul/ol 切替・階層ビュレット
独自契約
data-h2p-text-group— 複数 span を 1 テキストボックスの行にdata-h2p-raster— 強制画像化--width --height— 96px/in 等の物理サイズ指定
精度・フォント
autoTextBoxFit— 背景コンテナ検出+安全マージン補正autoEmbedFonts— fsType ライセンス検査つきフォント埋め込み
全警告に要素ロケータ+機械可読コード
対立する2契約(ドリフト≤5px / マージン≥12px)で常時検証
🖥 ブラウザ編集 UI Slide Studio
ZIP を読み込んで、変換前のスライドをブラウザ上で仕上げる日本語 UI。
編集
- ライブサムネイルによるスライド切替
- クリック選択+インスペクタ(文字・タイポ・ボックス・塗り/枠線)
- ドラッグ移動・コーナーリサイズ、1段 Undo
- ソース(HTML/CSS)直接編集
変換フィードバック
- 完了ジョブの警告を全件表示、クリックで該当要素へジャンプ+ハイライト
- ZIP 読込時の事前診断、選択要素の静的変換ヒント
エクスポート
- 経過時間・試行回数を表示するキャンセル可能ポーリング
- 未保存編集の 3 択確認(適用 / 破棄 / キャンセル)
- 署名付きダウンロード
設計
- patch 方式編集モデル — 表示用状態が出力へ混入しない構造
- ローカル単体エディタ(CLI
edit)とも UI 資産を共有
🔌 API・連携
| REST API |
非同期ジョブ(作成→ポーリング)、ZIP 入稿(inspect→編集→変換)、HMAC
署名付きダウンロード(TTL)、idempotency、レート制限+利用量ヘッダ、Webhook、RFC 9457
エラー、OpenAPI(契約テストで実装と強制同期)、/api/status
|
|---|---|
| 認証・境界 |
API キー(sha256 ダイジェスト保存+h2p-api-keys 発行 CLI)、CORS
許可リスト、本番ガード(設定不備は起動拒否のフェイルクローズ)
|
| ストレージ | in-memory ⇄ S3 互換(Cloudflare R2 / S3 / MinIO)を環境変数で切替 |
| MCP | stdio / Streamable HTTP、エクスポート・診断・ドキュメント・テンプレート等 11 ツール |
| CLI |
convert / diagnose(exit code で CI ゲート)/
edit(ローカル編集ブリッジ)
|
🛡 品質・運用基盤
回帰・テスト
- 比較 2 スイート(LibreOffice レンダリング比較)
- ユニット 200+ / 機能スモーク 17 シナリオ / docker-smoke
CI
- 整形 → 依存監査(high で fail)→ 型検査 → テスト → パッケージ検証
公開運用
- Cloudflare Tunnel + 常駐エージェントによる無償公開(招待キー制)
- Cloudflare Containers + R2 構成も配備済み(有償プランで切替可)
意思決定の記録
- ADR 5 本+実装計画書(検証数値つき実施記録)
外部画像・リモートフォントは取得しない設計(SSRF 対策)