Edit lint
edit.json と任意の analysis.json / captions.json / メディアを決定的 CLI で検査し、PASS 後のフレーム視認とレポートまで QA を完了する。edit.json を書いた、または変更した直後、書き出し前、レビュー指摘を反映した後の再確認で使う。From its SKILL.md
npx -y skills add AkariLabs/akari-video --skill edit-lintAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
7.0 KB, as published. Nobody here has run it
編集結果を lint して QA を閉じる
Language: Respond in the user's language — 対話・質問・承認確認・レポートはユーザーの使用言語に合わせる(例: 英語で話しかけられたら英語で応答する)。
ハードルール
- 決定的であること: 同一入力 → 同一出力。LLM 判断・乱数・現在時刻を判定に混ぜない
(
checked_atの記録は可・判定には使わない) - 外部 npm 依存ゼロ。ffmpeg / ffprobe は本体直叩き(ラッパーライブラリ禁止)
- 書き込みは
.akari/lint.jsonと.akari/reports/のみ。edit.json を自動修正しない (fix は人間/エージェントの編集として git diff に出す) - ネットワーク禁止(完全ローカル・headless-first 不変条件どおりアプリ不要)
- 外部候補のコード転写禁止(loudcheck 等は設計参考のみ。survey の転記条件に 関わらず本 CLI は全量自作 — 依存ゼロ規律と同根)
- analysis.json / captions.json /
.akari/intake.json不在をエラーにしない(skipped 報告。 プロジェクトの成長段階に関わらず常に走れる) --mediaなしの既定実行はメディアをデコードしない(起動・CI で常用できる速さを守る)- 視認に使うキーフレーム静止画・QA 生成物、ad-hoc な一時検証スクリプトはプロジェクトルート
直下に書かない。前者は
.akari/reports/、後者は.akari/work/へ置く (project-structure-v0 契約 §1)
実行手順
-
edit.json を保存した直後に、リポジトリルートから次を実行する。
node packages/edit-lint/bin/edit-lint.mjs <project-root|edit.json> -
exit code と
<project>/.akari/lint.jsonを確認する。0は PASS、1は FAIL、2は入力や実行環境のエラーを表す。 -
FAIL なら
findings[]を上から読み、指摘された edit.json、参照ファイル、overlay HTML、captions.json を手で修正する。CLI に自動修正させない。 -
同じコマンドを再実行し、error finding がなく
verdict: "pass"になるまで繰り返す。analysis.json または captions.json が無い検査はskipped[]で確認する。 -
PASS 後に、カット境界と overlay の開始・終了フレームを実際に視認する。機械検査の PASS を意味的な品質確認の代わりにしない。
-
<project>/.akari/reports/edit-lint-report.htmlとフレーム視認結果を編集レポートへ反映し、checkpoint 状態と provenance を実態に合わせて閉じる。
音声も確認するときだけ --media を追加する。無音区間と音量値は既定で warning になり、次の明示閾値を指定した検査だけが FAIL になり得る。
node packages/edit-lint/bin/edit-lint.mjs <project> --media
node packages/edit-lint/bin/edit-lint.mjs <project> --media --silence-error-seconds 2 --max-volume-error-db -0.1
機械向けの標準出力が必要なら --json を追加する。状態の正本は常に .akari/lint.json とし、HTML は可視化にだけ使う。
.akari/intake.json(進め方フォームの保存先。契約: packages/schemas/intake.schema.json)が存在すれば、schema 検証と整合検査(未知の task ID・duration_s/keep_length の同時指定・status: submitted なのに submitted_at 欠落 等)を合わせて行う。不正値は error(FAIL)、status: "draft"(進め方が未確定)は warning に留める。
非スコープと拡張候補
黒フレーム、フリーズ、ビート、シーン、フラッシュフレーム、ギャップ、重複クリップ、オフラインメディア、セーフゾーン、フレームレート不整合は将来候補であり、現在の PASS 条件へ推測で追加しない。
音楽グリッド検査(宣言があるときだけ)
audio.bgm.path に対応する宣言が見つかったときだけ、
packages/audio-library-setup/shared/beat-grid.mjs の musicGrid で timeline 秒のグリッドを作り、
audio.sfx[].t を照合する。宣言ファイルの解決順は suggest-bgm / beat-grid
と同じく、--declarations → 環境変数 AKARI_SOUNDS_DECLARATIONS →
<ライブラリ>/declarations.json である。
audio.sfx.music-grid(warning): kind を問わず真に最寄りのグリッド点との差が ±0.12 秒を 超えると警告する。同距離の場合だけキメ > 小節頭 > 拍の順で優先する。拍に乗せない演出も 正当なので error にはしない。audio.sfx.music-grid-seam(warning): BGM が末尾から先頭へ戻るループ継ぎ目の ±0.3 秒以内で SE が発火すると警告する。
宣言が無い、audio.bgm が無い、audio.sfx が空、または BGM の実尺を ffprobe で取得できない
場合は検査を静かにスキップする。理由は skipped[] に残すが warning は出さない。宣言は任意であり、
media からビートを自動検出する機能とは別の検査である。
公開契約
edit.json の検査対象は次の公開契約が定めるフィールドである。契約に無いフィールドの検査を推測で 足さず、契約が定めた検査(構造・id 一意性・範囲・参照整合)は既に実装済みである。
- edit.json v0
- マルチソース
sources[]/cuts[].src—version: 1の必須形、sourceとsources[]の排他、sources[].idの一意性、cuts[].srcの参照整合 - ナレーション
audio.narration[]— id 形式と一意性、tの timeline 座標、gain_db範囲、provenance と credit - 見せ場マーカー
beats[]— id・t(source 秒)・kind・strength・srcの参照整合(srcは v1 のみ) - 演出宣言
direction—presetの必須とintensityの範囲、overridesの型 - 語レベル演出
emphasis_words[]— id 形式と一意性、t_end > t_start(source 秒)、srcの参照整合(srcは v1 のみ) - 字幕とカット編集
- QA lint の方向性