Skip to content

feat: support generating multiple image variants per beat #1627

Description

@ystknsh

概要

ビートの画像生成において、1 クリックで N 枚(デフォルト 4 枚)を並列生成し、ユーザーが既存の履歴 UI から好きな 1 枚を選べるようにする。

背景

  • アニメ・イラスト用途では「1 クリック = 1 画像」だと当たり外れの試行回数が増える
  • 一方で「常に 1 枚で十分」というユーザーもいるため、opt-in にする必要がある
  • CLI 側はパイプライン実行が前提なので、この体験は app 側で実装するのが妥当
  • 現状の履歴機能({beatId}-{timestamp}.{ext} でバックアップ保存、MediaBackupDialog から復元)が既に存在するため、そこに乗せるのが自然

設計方針

並列生成 → 履歴に積む方式

  1. ユーザーが「N 枚生成」を実行
  2. mulmoGenerateBeatImage を内部で並列に N 回呼び出し
  3. 各呼び出しで withBackup: true の既存挙動により自動的にバックアップとして履歴に積まれる
  4. 最後に完了したものが {beatId}.{ext}(current)になる
  5. ユーザーは既存の MediaBackupDialog を開いて好きな 1 枚を選ぶ → mulmoImageRestoreBackup で current に切替

メリット

  • 履歴管理ロジック・UI を新規追加せずに済む
  • movie 生成側は今まで通り current ファイルを参照するだけ → CLI/パイプラインは無改修

検討すべき論点

1. タイムスタンプ衝突

現在のファイル名形式 {beatId}-{YYYYMMDDhhmmss}.{ext} だと、並列生成で同一秒内に複数完了した場合に上書きが起きる。

  • 案 A: ms 精度に拡張(YYYYMMDDhhmmssSSS
  • 案 B: 連番サフィックス追加({beatId}-{timestamp}-{n}.{ext}
  • 既存履歴ファイル(旧形式)との互換は要確認

2. 「今回生成したバッチ」の見分け

履歴が多数ある状態で N 枚追加すると、MediaBackupDialog の中で「さっき生成したぶん」がパッと選びにくい。

  • : 生成完了直後に該当ダイアログを自動オープン、新規バッチをハイライト
  • バッチ ID(生成セッション ID)を持たせるかどうか

3. ON/OFF 切り替え方法

  • 案 A: プロジェクト単位の設定 imageGenerationCount: 1 | 4
  • 案 B: ビートごとに「複数生成」ボタンを別途用意(既存ボタンと並列)
  • 案 C: グローバル設定(全プロジェクト共通)

4. API コストとシード

  • 1 クリック N 倍のコスト → 設定 UI でコスト警告を出すか
  • 並列実行時、同じプロンプト・同じシードだと同じ画像が返る生成器がある可能性 → リクエストごとにシードをばらすか、mulmocast 側の seed 扱いを確認する必要がある

やること(未確定、議論次第)

  • ファイル命名規則の変更(タイムスタンプ衝突対策)
  • N 枚並列生成の IPC ハンドラ実装
  • 並列生成ボタン or 設定 UI の追加
  • MediaBackupDialog の自動オープン・新規バッチハイライト UX
  • シード/バリエーションの扱い検証

関連

  • 履歴機能: src/main/mulmo/handler_contents.ts:319-407mulmoMediaBackupList, mulmoMediaRestoreBackup
  • 画像生成: src/main/mulmo/handler_generator.ts:170-259mulmoGenerateBeatImage
  • 履歴 UI: src/renderer/pages/project/script_editor/beat_editors/media_backup_dialog.vue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions