0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DeepSeek Harnessから動画編集プロジェクトを安全に操作する:Timeline Studioプラグインを作った

0
Posted at

はじめに

LLMは「この動画を縦型にして、字幕を残し、MP4を書き出して」といった編集意図を理解できます。しかし、助言できることと、実際の編集プロジェクトを安全に変更できることは別問題です。

実際にAgentへ動画編集を任せるには、少なくとも次の課題があります。

  • 対象プロジェクト、トラック、クリップを正しく特定する
  • 元ファイルを上書きしない
  • 同じ操作をリトライ時に二重実行しない
  • 古いプロジェクト状態に基づく書き込みを防ぐ
  • ワークスペース外のファイルへアクセスさせない
  • レンダリング結果を実ファイルとして検証する

これらを解決するため、DeepSeek HarnessとTimeline Studioを接続するOSSプラグイン dsh-timeline-studio-plugin を公開しました。

DeepSeek Harness本体やDeepSeek公式のプロジェクトではなく、Timeline Studio向けに開発したコミュニティプラグインです。

自然言語から編集可能なプロジェクトまで

何を作ったのか

このプラグインは、新しい動画編集UIを追加するものではありません。

Timeline Studio が編集可能なタイムライン、メディア処理、ブラウザローカルAI機能、プレビューを担当し、dsh-timeline-studio-plugin がDeepSeek Harnessから呼び出せる決定的な操作レイヤーを提供します。

処理の流れは次のとおりです。

自然言語による依頼
  ↓
DeepSeek Harness
  ↓
プロジェクトを読み取り専用で検査
  ↓
構造化された編集プランを作成
  ↓
Diffで事前検証
  ↓
Applyで新しい.timelineへ反映
  ↓
MP4をレンダリングして検証

Agentは「何をしたいか」を判断し、プログラム側は「その操作が許可され、現在の状態で実行可能か」を検証します。

利用イメージ

DeepSeek Harnessで、.timelineプロジェクトと素材を含むローカルワークスペースを選択します。

DeepSeek Harnessのワークスペース画面

最初は読み取り専用の依頼から始められます。

ワークスペース内のTimeline Studioプロジェクトを確認し、長さ、アスペクト比、トラック、素材を教えてください。まだファイルは変更しないでください。

確認後、たとえば次のように依頼します。

プロジェクトを9:16に変更してください。まず変更内容をプレビューし、問題がなければ元ファイルを上書きせず新しいプロジェクトとして保存し、MP4もレンダリングしてください。

プラグインの効果はHarness上のツール実行結果と、生成された.timeline/MP4ファイルに現れます。詳細な映像確認や手作業での調整はTimeline Studioで続けられます。

提供する7つのツール

ツール 役割
timeline_studio_project_inspect revision、長さ、アスペクト比、トラック、メディアを確認
timeline_studio_track_inspect 指定トラックのクリップを時間順に確認
timeline_studio_clip_inspect 素材参照、時間、変形、関連付けを確認
timeline_studio_transcript_inspect 字幕、単語時刻、話者、音声との関連を確認
timeline_studio_project_diff 編集プランを実コマンドで事前検証
timeline_studio_project_apply revision確認後にトランザクションとして反映
timeline_studio_project_render H.264/AAC MP4を生成して検証

3つの能力グループ

JSONを直接書き換えない理由

AgentにプロジェクトJSON全体を渡し、新しいJSONを生成させる方法は簡単です。しかし、構文が正しくても編集アプリケーション上の意味が正しいとは限りません。

たとえば、削除済みクリップの参照、不正なトラック配置、未対応プロパティ、重複操作などが起こり得ます。

そこで、Agentはファイルを直接書き換えず、次のような編集プランを作ります。

{
  "schemaVersion": 1,
  "project": "/projects/input.timeline",
  "baseRevision": 0,
  "dryRun": false,
  "operations": [
    {
      "id": "set-ratio-001",
      "type": "project.set_ratio",
      "ratio": "9:16"
    }
  ],
  "output": {
    "project": "/projects/output.timeline"
  }
}

このプランをTimeline Studioの実コマンドレジストリで検証してから反映します。

Diff → Applyという安全ゲート

編集は必ず二段階です。

timeline_studio_project_diff
  ↓ 成功した場合のみ
timeline_studio_project_apply

Diffでは出力ファイルを書き換えず、次の内容を確認します。

  • コマンドが実在するか
  • パラメータが妥当か
  • 対象クリップが存在するか
  • プロジェクトのrevisionが一致するか
  • 同じoperation IDが実行済みでないか
  • 入出力パスが許可範囲内か

チャットの誤回答なら再生成できますが、ローカルファイルへの誤操作はユーザーの成果物を壊す可能性があります。そのため、事前検証を必須にしています。

revisionとoperation ID

Agentのツール呼び出しは、ネットワーク切断、キャンセル、再計画などによってリトライされる場合があります。

プラグインは二つの仕組みで重複や競合を防ぎます。

revision

inspectで現在のrevisionを取得し、編集プランのbaseRevisionへ入れます。途中でプロジェクトが更新されていた場合、古い状態に基づく新しい書き込みを拒否します。

operation ID

各操作には一意のIDを付けます。同じIDが再送された場合は実行済みと判断し、同じクリップを二重に追加するような副作用を防ぎます。

allowedRootsはプロンプトではなく実装上の境界

動画編集では素材や出力ファイルへアクセスするため、ファイルシステムの制限が重要です。

- name: 'dsh-timeline-studio-plugin'
  config:
    timelineStudioRoot: /absolute/path/web_player
    allowedRoots:
      - /absolute/path/projects

プロジェクト、編集プラン、入力素材、出力ファイルは、すべてallowedRoots内に解決される必要があります。シンボリックリンクを利用した境界外への遷移も拒否します。

「ワークスペース外を読まないでください」というプロンプトだけに依存せず、コードで強制する設計です。

インストール

検証済みの構成は以下です。

  • DeepSeek Harness 0.1.0-rc.6 Developer Preview
  • Node.js 22.20+ または 24+
  • 依存関係を導入済みのTimeline Studio
  • FFmpeg / ffprobe

GitHubからDSH Bundleとして追加できます。

dsh plugin --profile web add \
  "github:MartinDelophy/dsh-timeline-studio-plugin#main"

起動時にTimeline Studioとプロジェクト領域を指定します。

TIMELINE_STUDIO_ROOT=/absolute/path/web_player \
TIMELINE_PROJECTS_ROOT=/absolute/path/projects \
dsh --profile web

TIMELINE_STUDIO_ROOTが未設定の場合、既存profileへ影響しないようBundleは無効のままです。

設定後、DeepSeek Harnessの「設定 → プラグイン → プラグイン一覧」でtimelineを検索します。

プラグインが有効・マウント済みの状態

「有効」と「Cordis: マウント済み」が確認できれば準備完了です。

E2Eで確認したこと

単にツールが登録されるだけでなく、実際のDeepSeek Harness/Cordis経路を通したE2Eテストも実施しました。

  • DSH Bundleのインストール
  • Cordis設定への自動マウント
  • 7ツールの登録
  • 実際の.timelineプロジェクトのinspect
  • Diffがファイルを書き換えないこと
  • Applyのrevision/冪等性チェック
  • allowedRootsとシンボリックリンク境界
  • キャンセル信号の子プロセスへの伝播
  • 出力プロジェクトの再検査
  • MP4のレンダリングと検証
npm run check
TIMELINE_STUDIO_ROOT=/absolute/path/web_player npm run test:e2e

DeepSeek HarnessはDeveloper Previewのため、将来破壊的変更が入る可能性があります。そのため、Harness固有のアダプターを薄く保ち、編集ロジックはTimeline Studio側へ集約しています。

まとめ

今回作ったものは、単に「AIに動画を編集させるツール」ではありません。

実運用できるAgentには、モデル性能だけでなく、次の仕組みが必要だと考えています。

  • 読み取り専用の状態確認
  • 構造化された操作プラン
  • 書き込み前のDiff
  • revisionによる競合防止
  • operation IDによる冪等性
  • ファイルアクセス境界
  • 出力結果の再検証
  • 人が編集を続けられるプロジェクト形式

モデルは意図理解と計画を担当し、プログラムは制約と決定的な実行を担当する。そして、最終的な判断と編集権限はクリエイターに残す。この分担を実装したのがdsh-timeline-studio-pluginです。

Issue、フィードバック、コントリビューションを歓迎します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?