fal-workflow について
fal-workflowは、複数のAIモデルをつないだfal.aiワークフローのJSONを生成するスキルです。ノードの種類、依存関係、入出力参照を正しく定義するための規則を示します。
主な機能
- 01ワークフローJSONの生成
- 02複数モデルノードの連結
- 03入出力スキーマの定義
- 04依存関係と参照の検証
- 05エラー確認ルールの提示
活用シーン
- 01テキスト・画像・動画生成の連結
- 02スキーマ規則に沿ったワークフロー作成
- 03ノードや依存関係の設定エラーの調査
MCP 対応
MCPツールmcp__fal-ai__create-workflow、またはスクリプトでワークフローを作成できます。モデル検索用のsearch_models MCPツールも記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fal-ai-community/ skills --skill fal-workflowインストール後、Claude Code で/fal-workflowを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/EXAMPLES.mdMODELS.mdPATTERNS.mdWORKFLOWS.mdscripts/create-workflow.sh詳細
fal.ai ワークフロージェネレーター
100%動作する、本番環境対応の fal.ai ワークフロー JSON ファイルを生成します。ワークフローでは複数の AI モデルを連結し、複雑な生成パイプラインを構築できます。
参考資料:
トラブルシューティングの参考資料:
- 完全なワークフロー - デバッグ用の動作する JSON の例(ユーザーからエラーの報告があった場合にのみ使用してください)
コアアーキテクチャ
有効なノードタイプ
⚠️ 有効なノードタイプは 2 種類のみです:
| タイプ | 用途 |
|---|---|
"run" | モデル/アプリを実行 |
"display" | 結果をユーザーに出力 |
❌ 無効: type: "input" - これは存在しません!入力は schema.input でのみ定義されます。
最小限の動作例
{
"name": "my-workflow",
"title": "My Workflow",
"contents": {
"name": "workflow",
"nodes": {
"output": {
"type": "display",
"id": "output",
"depends": ["node-image"],
"input": {},
"fields": { "image": "$node-image.images.0.url" }
},
"node-image": {
"type": "run",
"id": "node-image",
"depends": ["input"],
"app": "fal-ai/flux/dev",
"input": { "prompt": "$input.prompt" }
}
},
"output": { "image": "$node-image.images.0.url" },
"schema": {
"input": {
"prompt": {
"name": "prompt",
"label": "Prompt",
"type": "string",
"required": true,
"modelId": "node-image"
}
},
"output": {
"image": { "name": "image", "label": "Generated Image", "type": "string" }
}
},
"version": "1",
"metadata": {
"input": { "position": { "x": 0, "y": 0 } },
"description": "Simple text to image workflow"
}
},
"is_public": true,
"user_id": "",
"user_nickname": "",
"created_at": ""
}
参照構文
| 参照 | 用途 | 例 |
|---|---|---|
$input.field | 入力値 | $input.prompt |
$node.output | LLM テキスト出力 | $node-llm.output |
$node.images.0.url | 1 枚目の画像 URL | $node-img.images.0.url |
$node.image.url | 単一画像の URL | $node-upscale.image.url |
$node.video.url | 動画 URL | $node-vid.video.url |
$node.audio_file.url | 音声 URL | $node-music.audio_file.url |
$node.frame.url | 抽出したフレーム | $node-extract.frame.url |
重要:文字列補間は禁止
⚠️ テキストと変数を混在させないでください!変数は値全体でなければなりません。
// ❌ WRONG - WILL BREAK
"prompt": "Create image of $input.subject in $input.style"
// ✅ CORRECT - Variable is the ENTIRE value
"prompt": "$input.prompt"
"prompt": "$node-llm.output"
値を結合するには: fal-ai/text-concat または fal-ai/workflow-utilities/merge-text を使用してください。モデルリファレンスを参照してください。
重要なルール
C1:依存関係は参照と一致させる
// ❌ WRONG
"node-b": {
"depends": [],
"input": { "data": "$node-a.output" }
}
// ✅ CORRECT
"node-b": {
"depends": ["node-a"],
"input": { "data": "$node-a.output" }
}
C2:ID はオブジェクトキーと一致させる
// ❌ WRONG
"my-node": { "id": "different-id" }
// ✅ CORRECT
"my-node": { "id": "my-node" }
C3:正しい LLM タイプを使用する
openrouter/router→ テキストのみ。image_urls は使用しませんopenrouter/router/vision→ 画像を分析する場合にのみ使用します
C4:Schema に modelId が必要
"schema": {
"input": {
"field": { "modelId": "first-consuming-node" }
}
}
C5:出力は参照先のすべてのノードに依存する
"output": {
"depends": ["node-a", "node-b", "node-c"],
"fields": {
"a": "$node-a.video",
"b": "$node-b.images.0.url"
}
}
クイックリファレンスカード
出力参照
| モデルタイプ | 出力参照 |
|---|---|
| LLM | $node.output |
| テキスト結合 | $node.results |
| テキストマージ | $node.text |
| 画像生成(配列) | $node.images.0.url |
| 画像処理(単一) | $node.image.url |
| 動画 | $node.video.url |
| 音楽 | $node.audio_file.url |
| フレーム抽出 | $node.frame.url |
search-models.sh または MCP ツールの search_models を使用して、現在利用可能なモデルを確認してください。ワークフローのコードテンプレートについては、references/MODELS.md を参照してください。
入力スキーマ
"schema": {
"input": {
"text_field": {
"name": "text_field",
"label": "Display Label",
"type": "string",
"description": "Help text",
"required": true,
"modelId": "consuming-node"
},
"image_urls": {
"name": "image_urls",
"type": { "kind": "list", "elementType": "string" },
"required": true,
"modelId": "node-id"
}
}
}
出力前チェックリスト
ワークフローを出力する前に、以下を確認してください。
- ⚠️ すべてのノードのタイプは
type: "run"またはtype: "display"のみ(type: "input"は不可!) - ⚠️ 文字列補間をしていない。変数は値全体でなければならない
- すべての
$node.xxxに対応するdependsエントリがある - すべてのノードの
idがオブジェクトキーと一致している - 入力スキーマの各フィールドに
modelIdがある - 出力が参照先のすべてのノードに依存している
- 正しい LLM タイプを使用している(router と router/vision)
使用方法
スクリプトを使用する場合
bash /mnt/skills/user/fal-workflow/scripts/create-workflow.sh \
--name "my-workflow" \
--title "My Workflow Title" \
--nodes '[...]' \
--outputs '{...}'
MCP ツールを使用する場合
mcp__fal-ai__create-workflow({
smartMode: true,
intent: "Generate a story with LLM, create an illustration, then animate it"
})
トラブルシューティング
無効なノードタイプのエラー(最もよくある問題)
Error: unexpected value; permitted: 'run', 'display', field required
原因: 存在しない type: "input" のノードを作成しています。
解決方法: type: "input" のノードをすべて削除してください。入力フィールドは schema.input でのみ定義します。
依存関係のエラー
Error: Node references $node-x but doesn't depend on it
解決方法: 参照先のノードを depends 配列に追加してください。
ID の不一致エラー
Error: Node key "my-node" doesn't match id "different-id"
解決方法: オブジェクトキーが id フィールドと完全に一致していることを確認してください。
LLM Vision のエラー
Error: image_urls provided but using text-only router
解決方法: 画像を分析する場合は openrouter/router/vision に切り替えてください。
モデルスキーマの確認方法
各モデルの入力/出力スキーマ:
https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=[endpoint_id]
例:
https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=fal-ai/nano-banana-pro