鍵自動運転のトークンは、自動運転にしか効かない
ワーカーが持つ Bearer トークンは自動制作 API 専用です。一般の生成 API にも管理 API にも 通りません。サーバーが保存しているのは SHA-256 だけで、原文は持っていません。
できたもの
縦型 1080×1920。動画とカバー画像、投稿用の本文とハッシュタグまでが1回の実行で揃います。
実物はこれから載せます
自動で作られたリールと、その回に出たカバー画像・本文・ハッシュタグをそのまま並べる場所です。
自動運転
クラウドに常駐プロセスを置いていません。手元の機械が次の予定を取りに来て、 作り終わったら終わったと報告する。それだけの往復です。
据え置きPCのワーカーが /api/automation/v1/schedule を叩き、 次に回す番が来ているかを聞きます。まだなら何もせず帰ります。
台本・ナレーション・画像・動画・レンダリングまで、画面で押すのと同じ工程を通ります。 入口が違うだけで、中身は手で作るときと1つも変わりません。
1080×1920 のカバー画像と、日本語の本文(導入 → 材料と分量 → 番号付きの作り方 → 保存の呼びかけ → ハッシュタグ最大5個)。文字はフィードで切られない位置に収めます。
/schedule/complete を返すと次回時刻が繰り上がります。投稿はしません。そこは人が見てから手で出します。
ワーカーが持つ Bearer トークンは自動制作 API 専用です。一般の生成 API にも管理 API にも 通りません。サーバーが保存しているのは SHA-256 だけで、原文は持っていません。
1回あたりと24時間あたりの上限を持っていて、超えるなら実行しません。 有料の工程そのものも、明示的に有効化したときだけ動きます。寝ているあいだに請求が伸び続けることはありません。
課題
生成そのものは速くなりました。詰まるのは、そのあとです。
3カット目を詰めたら、5カット目が別物になっている。直していないところが動く限り、確認は終わりません。
履歴が「生成し直した回数」しか持っていない。気づいたときには、2手前の良かった状態へ戻す道が無い。
軽いプレビューで詰めた字幕が、書き出すと数ピクセルずれる。結局、確認のたびに完成尺を待つことになる。
できること
縦型 1080×1920 の短尺を対象にしています。ここに挙げたものは、いま app.cutlock.jp で動いています。
作りたいものを書くと、Claude が台本を書き、シーンに割り、各シーンの画像・動画プロンプトまで起こします。参考にしたい画像は5枚まで添えられます。
音声を選んで生成すると、単語タイムスタンプが返ります。そこから各シーンの尺が小数で確定します。読みにくい語は読み方を指定できます。
シーンごとに候補を3枚。サムネイルをクリックすれば採用が入れ替わります。シーン単位で元画像をアップロードして効かせることもできます。
動画を作る前に Claude の一次判定を挟みます。ここを通ってはじめて、いちばん高い動画生成の費用が出ます。
採用画像から image-to-video。1本およそ26秒で返り、採用と採用区間が自動で入ります。ナレーションの実測で尺が動いても、採用区間はそれに追随します。
各カードは 1080×1920 を縮小した実寸プレビュー。字幕は上下にドラッグ、文字はクリックで書き換え。すべて1操作1 Undo。
使用カラーと書体を選べます。書体は登録簿から引くので、実行環境が変わっても字形は変わりません。
直した区間に絞ってレンダリングできます。実測では、480p へ縮小するより区間を絞るほうが効きます。
「3カット目を0.4秒詰めて」と書くと、当たるパッチが返ります。既定はドライラン。中身を見てから適用します。
ダッシュボードに、どのプロジェクトがどこまで進んでいるかが並びます。複製して別案を作ることもできます。
原則
映像業界の picture lock — 編集を確定させ、これ以上映像を変更しない状態 — から取った名前です。 汎用の動画編集ソフトは目指しません。
プロジェクトJSON が真実で、画面はその投影にすぎません。GUI のドラッグも、CLI も、Claude の tool use も、 すべて同じ applyTransaction を通ります。フィールドへ直接代入するコードは、どこにも存在しません。
シーン尺を変えれば後続シーンの start を詰め直す必要があります。それは派生パッチとして 明示的に記録されます。ユーザーが触っていないフィールドが黙って動くことはありません。
プレビューはレイアウトを縮めません。1080×1920 で組んだ stage を transform: scale() で 縮めるだけ。だから字幕の座標計算は完成物と完全に同一です。
指定した区間に重なる要素だけを 0 秒起点にリベースした派生コンポジションを出力します。 5.8秒の確認のために、30秒を待つ必要はありません。
仕組み
だから「Claude で編集」は、GUI とまったく同じ入口の上に薄く乗っているだけです。
タイムラインのドラッグ、CLI のコマンド、あるいは「3カット目を0.4秒詰めて」。入口は違っても、次に来る形は同じです。
applyTransaction が JSONパッチを1トランザクションとして適用し、逆パッチを積みます。 パスは scenes.#scene_03.duration のように id 参照で書けるので、並べ替えてもズレません。
プロジェクトJSON から HyperFrames のコンポジションHTML を生成します。区間が指定されていれば、 その区間に重なる要素だけを 0 秒起点へリベースした派生版を出します。
ブラウザで描いて FFmpeg で焼きます。ローカルは HyperFrames CLI、サーバーは HeyGen の HyperFrames クラウド。 コンポジションHTML を作る部分は両方で共有しています。
同じ JSON からは同じバイト列が出ます。確認したものが、そのまま納品物になります。picture lock。
構成
モデルIDはコードに埋めず、Model Registry から引きます。差し替えても過去のプロジェクトは履歴として残ります。
見積と実績を分けて、provider・モデル・用途ごとに記録します。べき等キーで重複課金を防ぎ、 1日の上限(既定 $20)を超えたら生成そのものを拒否します。
レンダリングの完了を検知したら、即座に自前のストレージへコピーします。コピーが終わってはじめて完了扱いにする。数日後に素材が消えないのはこのためです。
検証
レンダリング基盤そのものの性質を、生成APIから切り離して確かめたものです。合成素材のみで実行しています。
登録された paused タイムラインに、外から seek(t) できるか。
撮影順を逆にしても同一時刻は同一画像。順次再生ではなく、ランダムアクセスで解いています。
同一JSONを2回焼いて一致するか。
mp4 はファイル全体がバイト一致。PNGシーケンスでも全30フレームが画素単位で一致しました。
区間レンダーが実用速度に乗るか。合否ラインは 30秒尺を 60秒以内。
確認の単位が「完成尺」から「直した区間」へ落ちます。
正直なところ
先に書いておきます。使ってみて詰まる場所は、だいたいこの3つです。
動画側の公式APIに seed がありません。再生成は「近い候補をもう1本引く」までです。 seed が要る場面ではゲートウェイを切り替えられるようにしてあります。
レンダリングへ渡せる素材の合計にはサイズの上限があります。超えたときは、 どれが大きいのかを名前で挙げて中止します。区間を絞れば通ります。
カバー画像と本文とハッシュタグは用意しますが、Instagram へ出すのは人の手です。 アカウント連携も直接投稿も入れていません。最後に一度、人が見る場所を残してあります。
縦型の短尺を、壊さずに確定させることに絞っています。タイムラインに何でも置ける道具ではありません。