← ブログ

GLM-5によるAI画像・動画プロンプトオーケストレーション

GLM-5を推論レイヤーとして活用し、WaveSpeed上の画像・動画モデル向けプロンプトの生成、改善、チェーン化を実現する方法を解説します。

2 min read
GLM-5によるAI画像・動画プロンプトオーケストレーション

こんにちは、Doraです。「リネンのテーブルに置いたくすんだセラミックマグ、朝の光」というざっくりしたアイデアを短いプロダクトクリップに仕上げようとしていました。頭の中では映像が見えていました。でもプロンプトがうまくいかなくて。画像、動画、アップスケールツールの間を行ったり来たりしながら、微妙なフレーズを書き直すたびに何もかもが変わっていく。まるで断片の中で作業しているようでした。

そのごちゃごちゃの真ん中に GLM-5 を組み込んでみました。主役としてではなく、ホワイトボードの前に立つ人として。目標はシンプルです。GLM-5を画像・動画モデルのプロンプトオーケストレーターとして使うこと。メモに残し続けていたフレーズは「GLM-5 image video prompt」でした。これがそのまま仕事の内容を表しています。普通の説明文を受け取って、ダウンストリームのモデルが理解できるプロンプトに確実に変換する、ということです。

画像・動画パイプラインに強力なLLMが必要な理由

一つのモデルが何でもこなす必要はありません。一つのモデルが毎回同じように明確に物事を伝えてくれればいい。それがビジュアルパイプラインの成否を分けます。

画像と動画では、小さな単語が出力を大きく変えます。カメラの距離、焦点距離、素材を表す形容詞、さらには登場する順番まで。「拡散したバックライト」を末尾に追加しただけで雰囲気がガラリと変わった経験があれば、この感覚はわかるはずです。

以前は各ツール用に毎回プロンプトを手作りしていました。FLUXに一つ、WANに一つ、アップスケーラーにまた一つ。機能はしていましたが、スケールしないし、集中力も削られていました。中間に強力なLLMを置くと、三つのことをやってくれます。

  • 言語の正規化:カジュアルなブリーフを各モデルが理解できるスキーマに変換する。
  • ガードレールの設置:スタイルと技術仕様を制約して、バリエーションがぶれないようにする。
  • 記憶の保持:カメラ、パレット、製品メモなどの選択を、私が再入力せずにツール間で引き継ぐ。

これはタイピング時間を節約する話ではありません。セッションを食い尽くす小さな判断コストを節約する話です。GLM-5が構造を安定させてくれると、変化がクリアに見えます。何が変わったか、そしてなぜかが。

プロンプトオーケストレーターとしてのGLM-5

機能を探し回ったわけではありません。ただこう問いかけました。GLM-5は私の普通の説明文を受け取って、適切なモデル向けに整形し、ステップをまたいで全てを記録し続けられるか? 実際にどのように見えたかを紹介します。

自然な説明文からFLUXプロンプトを生成する

最初のステップ:短い平易な英語のブリーフをGLM-5に渡し、FLUX対応プロンプトを明示的なフィールドで求める。被写体、カメラ、照明、素材、背景、色の制約、ネガティブプロンプト。FLUXモデルのメモと公開されているプロンプトガイドを参考に構造を作り、わざと無味乾燥にしました。無味乾燥は繰り返しやすいから。

小さな発見:GLM-5は欠けている詳細を静かに推論するのが得意でした(例:焦点距離を選び忘れたとき50mm相当を補完する)。仮定にラベルを付けるよう求め、受け入れるか却下するかを決められるようにしました。これで何度もやり取りする手間がいくらか減りました。

スムーズにいかなかった点:GLM-5は時々、私が求めていない華美な形容詞をデフォルトで使いました(「幻想的な」「素晴らしい」など)。「具体的で、写真優先の言語のみ」というルールを追加すると、飾りが消えました。

チェーン:GLM-5プロンプト → WAN 2.5動画 → アップスケール

画像プロンプトが安定したら、GLM-5にそれをWAN 2.5用の動画プロンプトに変換させました。マッピングは1対1ではありません。動画にはモーション、タイミング、そして画像プロンプトが無視する制約が必要です。WANのドキュメントからシンプルなテンプレートを引用し、GLM-5に記入させました。モーションビート、カメラの動き(またはなし)、尺、被写体の動作、そして最初のフレームが画像レンダリングと一致するための連続性メモ。

二つのフィールドメモ:

  • GLM-5にデフォルトでカメラモーションを追加させると、WAN 2.5がシーンを過剰にアニメートすることがありました。動きを一軸に固定するか静止させると、よりクリーンなループになりました。
  • 画像と動画の間で色温度を合わせることは、思っていた以上に重要でした。GLM-5に数値のホワイトバランス目標値(例:5200K)をステップ間で引き継がせました。

アップスケールについては、退屈で決定論的なアプローチを維持しました。テクスチャの意図(マットかグロスか)、ノイズ許容度、シャープネスバイアスのみプロンプトに含める。シンプルなガイダンスがアーティファクトを減らしました。

A/Bテスト用のバッチプロンプト展開

ここがGLM-5が最も同僚らしく感じた場面です。GLM-5に五つのマイクロバリエーションを生成させるよう依頼しました。それぞれが一つのパラメーターだけを変える、焦点距離、テーブルのテクスチャ、時間帯、彩度の範囲。詩的な言い換えなし。バリアント一つにつきクリーンな差分一つだけ。それぞれに理由と予測されるリスクのラベルを付けました(例:「スペキュラハイライトが生じる可能性あり」)。

最初は時間の節約にはなりませんでした。良いものと悪いものを選別する必要は相変わらずありました。でも三回目のバッチで、精神的な負荷が下がっていることに気づきました。構造が比較を公正にしてくれたのです。どのプロンプトが聞こえのいいものかではなく、どの選択が勝ったかが実際に見えるようになりました。

エージェント的ワークフロー:GLM-5がマルチステップ生成を計画する

「エージェントモード」をオンにして席を外したわけではありません。GLM-5にステップを計画させ、仮定を確認させ、そして私を待たせました。シンプルなループです。計画 → プロンプト提案 → 私の編集 → 実行 → 要約。

GLM-5に最初に小さなチェックリストを渡すと効果的でした。

  • 目標を一文で明確にする。
  • 不明点を尋ねる(カメラ、パレット、モーション)。
  • 画像用の初稿プロンプトを作成し、次に動画用に変換する。
  • 共有の制約ブロックを維持する:製品SKUメモ、ブランドカラー、アスペクト比、最大モーション。
  • 各レンダリング後に、変わったことと保持すべきことを記録する。

例:プロダクト撮影 → 5アングル → 動画

ミニマルなプロダクト撮影でこれを試しました。セラミックマグ、リネンのテーブル、柔らかな朝の光。作業:異なるアングルから5枚のスチル写真、その後6〜8秒のループ動画。

観察したこと(2026年2月、3セッション):

  • ステップ1、アングルセット:GLM-5は明示的な距離と高さを持つ5つのカメラアングルを提案しました(例:高さ1.2m、奥行き0.6m、仰角35°)。その具体性が重要でした。バリアント間でコンポジションの一貫性が保たれました。
  • ステップ2、テクスチャコントロール:リネンについて、GLM-5はアップスケール時のモアレを防ぐために強い側光を避けることを提案しました。常に正しいわけではありませんでしたが、その注意書きが一つのノイズの多いテイクを救いました。
  • ステップ3、動画への引き渡し:WAN 2.5に移行する際、メインのスチルを「フレームゼロ」として扱いました。レンズ、ホワイトバランス、露出補正を引き継ぎました。サプライズが減りました。
  • ステップ4、サニティパス:2回のレンダリングごとに、GLM-5はドリフトを要約しました。「暖色+6%、影が深く、反射が導入」。これらの小さなメモのおかげで、いつ止めるかを判断しやすくなりました。

限界:音楽やモーションメモを超えたペーシングビートはGLM-5に決めさせませんでした。「クリエイティブ」になろうとすると、製品に合わないジェスチャーを追加してきました。ここでは自制が効果的でした。

プロンプト品質の比較:GLM-5とGLM-4.7の出力

同じ自然な説明文をGLM-4.7GLM-5に通し、出力をそのまま使いました。ラボテストではなく、締め切り前にやるようなトライアルです。

使用したブリーフ:「リネンのテーブルに置いたくすんだセラミックマグ、柔らかな朝の光、ニュートラルなパレット、ブランドなし。クリーンで静かで、リアルなもの。」

観察したこと:

  • 構造の規律:GLM-5はスキーマをより頻繁に遵守しました。GLM-4.7はスタイルフレーズ(「夢幻的な」「エレガントな」)に流れ、FLUXをライフスタイル系の方向に傾けました。GLM-5はカメラ、光、素材に徹しました。
  • 数値アンカー:GLM-5は控えめな数値のデフォルト値(35mm、f/4、5200K)を提示し、仮定としてラベルを付けました。GLM-4.7は求めない限り数値を省く傾向がありました。
  • ネガティブプロンプト:GLM-5は実用的なネガティブ(「ボケ玉、光沢のあるハイライト、望遠圧縮」)を含め、テスト画像のアーティファクトを減らしました。GLM-4.7のネガティブは汎用的でした。
  • 動画への変換:GLM-5はシンプルなモーションスクリプトとタイミングを追加しました。GLM-4.7は主に「短い動画」という言葉を添えて画像プロンプトをそのまま繰り返しました。WAN 2.5はGLM-5のタイミングをより尊重しました。

小さな反論:GLM-4.7は私の目には気持ちの良いプロンプトを生成することがあり、ムードボードには機能しました。コンセプト段階にいるなら、そのトーンは役立つことがあります。でも本番への引き渡しには、GLM-5の自制の方を好みました。

これらが、GLM-5が確実に繰り返せる言語パターンを与えてくれました。

コード例 — WaveSpeed SDKを使ったフルパイプライン

以下は私が使ったワークフローの形を示す簡略化した例です。キーとエンドポイントは自分のものに置き換えてください。このバリエーションを2026年2月9日に実行しました。エレガントではありません。でも信頼できます。

# pip install wavespeed sdk hypothetical

from wavespeed import GLM5, Flux, WAN25, Upscaler


glm = GLM5(api_key=GLM5_KEY)

flux = Flux(api_key=FLUX_KEY)

wan = WAN25(api_key=WAN_KEY)

up = Upscaler(api_key=UPSCALE_KEY)


brief = {

"subject": "muted ceramic mug on a linen table",

"mood": "soft morning light, neutral palette",

"constraints": {"aspect_ratio": "4:5", "brand_colors": ["#E8E4DA", "#8D8A83"]}

}

# 1) GLM-5にFLUX用にブリーフを正規化させる

flux_prompt = glm.generate(

system="Return a FLUX-friendly prompt with fields: subject, camera, lighting, materials, background, color, negatives. "

"Photography-first, numeric where helpful, minimal adjectives. Label assumptions.",

user=brief,

format={

"type": "object",

"properties": {

"subject": {"type": "string"},

"camera": {"type": "object"},

"lighting": {"type": "object"},

"materials": {"type": "object"},

"background": {"type": "string"},

"color": {"type": "object"},

"negatives": {"type": "array", "items": {"type": "string"}},

"assumptions": {"type": "array"}

},

"required": ["subject", "camera", "lighting", "negatives"]

}

)

# 2) 画像レンダリング

img = flux.generate_image(prompt=flux_prompt, seed=4217, steps=30, guidance=3.5)

# 3) WAN 2.5動画プロンプトに変換

wan_prompt = glm.generate(

system="Translate the FLUX prompt into a WAN 2.5 prompt. Include: duration 6-8s, motion beats, camera movement (static or gentle pan), "

"continuity with the image (lens, white balance), and a list of negatives.",

user={"flux_prompt": flux_prompt, "reference_frame": img.preview_url}

)


vid = wan.generate_video(prompt=wan_prompt, seed=4217, fps=24, duration=7)

# 4) シャープネスとノイズを制御してアップスケール

final = up.enhance(

input=vid.keyframe(0),

noise_reduction="low",

sharpening="moderate",

texture_bias="matte"

)

# 5) ドリフトサマリーを記録

drift = glm.generate(

system="Summarize differences between target brief and outputs. 3 bullets: warmth, contrast, motion.",

user={"brief": brief, "image": img.metrics, "video": vid.metrics}

)

print(drift)

LLMプロンプトをコードの近くに置いておくと、将来の自分が選択の理由を確認できます。YAMLテンプレートを好む場合もそれで問題ありません。重要なのは、GLM-5が構造化されたフィールドを返すので、編集せずにそのままレンダリング関数に渡せることです。

役立った小さなガードレールをいくつか:

  • ベースの見た目が気に入るまで全てにシードを設定する。その後、バリエーションが欲しい場所だけシードを解放する。
  • ホワイトバランスは感覚ではなく数値で引き継ぐ。
  • GLM-5に仮定をリストアップさせ、レンダリング前に受け入れるか却下するかを決める。

スタックがWaveSpeedを使っていない場合でも、アイデアは成立します。LLMはメモとモデルエンドポイントの間に座り、変換してスコアを記録し続けます。