mcpField
F
fal-workflow

fal-workflow

github.com/fal-ai-communityクリエイティブ・メディア257218 回インストール24 週間前に更新
リポジトリ

fal-workflow について

fal-workflowは、複数のAIモデルをつないだfal.aiワークフローのJSONを生成するスキルです。ノードの種類、依存関係、入出力参照を正しく定義するための規則を示します。

主な機能

  1. 01ワークフローJSONの生成
  2. 02複数モデルノードの連結
  3. 03入出力スキーマの定義
  4. 04依存関係と参照の検証
  5. 05エラー確認ルールの提示

活用シーン

  1. 01テキスト・画像・動画生成の連結
  2. 02スキーマ規則に沿ったワークフロー作成
  3. 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.md
MODELS.md
PATTERNS.md
WORKFLOWS.md
scripts/
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.outputLLM テキスト出力$node-llm.output
$node.images.0.url1 枚目の画像 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

コメント