fal-butler

fal-butler

Enables users to turn a product brief into a professional ad campaign, generating a validated fal.ai workflow.json with consistent characters, sound, and subtitles while showing costs before any model runs.

Category
访问服务器

README

fal-butler

Projeni bitirdin, reklam vermen gerekiyor — ama elinde video yok ve video prodüksiyonu bilmiyorsun.

fal-butler, projeni okuyup ürününü anlayan bir Claude Code plugin'i. Kısa bir röportajla kampanyayı öğrenir; sonra senarist, görüntü yönetmeni, hareket yönetmeni, ses tasarımcısı, kurgucu ve prompt mühendisinden oluşan bir ekip senin iki cümlelik tarifini profesyonel bir reklam kurgusuna çevirir.

Sen şunu yazarsın:

"Kadın, 30'larında, ofiste çalışıyor, yorgun başlıyor mutlu bitiyor."

Karşılığında fal.ai'a import edilmeye hazır bir workflow.json alırsın: altı sahne, birbirine görsel olarak zincirlenmiş, karakteri baştan sona aynı, seslendirmeli, müzikli, altyazılı ve platforma göre kesilmiş.

Bu plugin hiç para harcamaz

Plugin hiçbir modeli çalıştırmaz — bu bir söz değil, mekanizma: agent'ların araç listesinde yalnızca beş okuma aracı var (search_models, get_model_schema, get_pricing, recommend_model, search_docs). run_model, submit_job ve upload_file listede yok, dolayısıyla çağrılamaz. Depodaki denetçi joker MCP iznini test hatası sayar, yani bu garanti kazara gevşetilemez.

Üretimi sen fal panelinden, gerçek fiyatı gördükten sonra başlatırsın.


Kurulum

1. Plugin'i kur

/plugin marketplace add mertagralii/fal.ai-butler
/plugin install fal-butler

2. Anahtarını ver ve başla

https://fal.ai/dashboard/keys adresinden anahtarını al, sonra tek komut:

/fal-butler:setup <fal-api-anahtarın>

Bu kadar. Anahtar ~/.claude/settings.json dosyana yazılır, bağlantı test edilir, katalog önbelleğe alınır ve projen taranıp ürün profilin çıkarılır — hepsi tek seferde.

Anahtarı zaten kayıtlıysa argümansız çalıştır: /fal-butler:setup

Anahtar ~/.claude/settings.json'a yazılır — kullanıcı kapsamı, git'e girmez. Projenin içindeki .claude/settings.json commit edilir; oraya asla yazılmaz. Kayıt sonrası anahtarın tamamı ekrana basılmaz, yalnızca son 4 karakteri gösterilir.

Anahtarı kendin koymak istersen

~/.claude/settings.json dosyasına şu bloğu ekle ve Claude Code'u bir kez yeniden başlat:

{
  "env": {
    "FAL_KEY": "senin-anahtarin"
  }
}

<details> <summary>Ortam değişkenini tercih ediyorsan</summary>

# Windows — kalıcı olarak kullanıcı ortamına yazar
[Environment]::SetEnvironmentVariable('FAL_KEY', 'senin-anahtarin', 'User')
# macOS / Linux — kalıcılık için kabuk profiline ekle
export FAL_KEY="senin-anahtarin"

Windows'ta $env:FAL_KEY = "..." yalnızca o pencerede yaşar ve çalışmakta olan Claude Code onu görmez. İki yöntemde de Claude Code'u yeniden başlatmak gerekir.

</details>

Hangi yöntemi kullanırsan kullan, setup bağlantıyı gerçekten test eder — anahtar fal'a ulaşmıyorsa sana söyler ve diğer yönteme geçmeni önerir.


Komutlar

Komut Ne yapar
/fal-butler:setup [anahtar] Anahtarı kaydeder, MCP bağlantısını doğrular, model kataloğunu önbelleğe alır, projeni tarayıp product.md ürün profilini çıkarır. Bir kez çalıştırılır.
/fal-butler:campaign Röportajı yürütür, kurguyu planlar, onayını ister, sonra workflow.json üretir
/fal-butler:revise Var olan bir workflow.json'u ucuzlatır veya kurgusunu değiştirir

/fal-butler:campaign --quick sekiz soru yerine dördünü sorar; kalanını ürün profilinden türetir ve türettiklerini planda listeler.


Nasıl çalışıyor

Röportaj

Sorular tek tek gelir, her birinin ürün profilinden türetilmiş varsayılanı vardır: amaç, platform ve süre, anlatım biçimi, karakter, ton, dil, kapsam (seslendirme / müzik / altyazı — her biri ayrı ayrı kapatılabilir), CTA.

Dokuz adımlık zincir

0. fal-compiler ─── modelleri seçer, şemaları ve fiyatları çeker
1. fal-director ─── hook, sahne beat'leri, süre dağılımı, seslendirme metni, karakter bible
2. fal-dop ──────── plan ölçeği, lens, ışık kurulumu, palet, kompozisyon
3. fal-animator ─── hareket dili + zincirleme grafiği
4. fal-audio ────── TTS, müzik, miksaj + konuşma süresi denetimi
5. fal-animator ─── süre düzeltmesi (yalnızca gerekirse, tek tur)
6. fal-editor ───── kesim ritmi, geçişler, altyazı yerleşimi, montaj yapısı
7. fal-promptsmith ─ hepsini hedef modelin konuştuğu dile çevirir
8. fal-compiler ─── workflow.json'u derler ve doğrulayıcıdan geçirir

Model seçiminin başta olması gerekiyor: fal-animator klip süre sınırını, fal-promptsmith prompt lehçesini modelin şemasından okuyor.

Kullanıcı sinematografi bilmez — fal-dop "ofiste" tarifini "geniş pencereden yumuşak yan ışık, sabah, 35 mm his, hafif dolly-in" diye açar. Sen bunu düz Türkçe olarak görürsün, ham prompt olarak değil.

Karakter neden aynı kalıyor

karakter-sayfası ──┬──────────────────────────────────→ anahtar-kare-2 ← son-kare-1
                   │                                          ▲
                   ├──→ anahtar-kare-1 → video-1 → son-kare-1 ┘
                   │
                   └──────────────────────────────────→ anahtar-kare-3 ← son-kare-2

Önce 3–5 açılı bir karakter sayfası üretilir. Her sahnenin başlangıç karesi ondan image-edit ile türer; sahne videoya çevrilir; son karesi bir sonraki sahnenin referansına eklenir.

Karakter sayfası her sahneye bağlı kalır — yalnızca önceki sahneye zincirlemek sapmayı biriktirir ve altıncı sahnede başka biri çıkar. Seed kampanya başına sabitlenir ve brief.md'ye yazılır, böylece revizyonlar deterministik olur.

Onay kapısı

Adım 7'den sonra, hiçbir dosya yazılmadan karşına düz Türkçe bir plan gelir:

Sahne 2 — Büyütme (0:06–0:14) Ayşe ekrana bakıyor, bildirimler yığılıyor. Yakın plan, sabah ışığı, soğuk ton. Ses: "Bildirimler bitmiyor." Model: <endpoint> · 8 sn · ~$X

Altı sahne, kullanılacak modeller, toplam tahmini maliyet ve uyarılar. Onaylamazsan hiçbir şey yazılmaz.

Doğrulama

Üretilen workflow.json bağımsız bir script'ten geçer: düğüm referansları çözülüyor mu, döngü var mı, contents.schema.input tanımlı mı, düğüm id'leri anahtarlarıyla uyuşuyor mu, kullanılan endpoint'ler katalogda gerçekten duruyor mu.

Geçmeyen dosya sana verilmez. Hatalı JSON'u teslim etmek, hatayı fal'ın import ekranında öğrenmek demek.

Revizyon

fal'da fiyatı gördün, pahalı geldi:

/fal-butler:revise maliyeti yarıya indir

Önce paranın nereye gittiğini gösterir, sonra somut seçenekler sunar — her birinin ne kadar düşürdüğü ve neyi feda ettiğiyle birlikte. İki şeyi asla önermez: karakter sayfasını kaldırmak ve zincirlemeyi kaldırmak. Onlar ucuzlatma değil, kampanyayı çöpe atmak.

Kurgu revizyonu da aynı komuttan: "üçüncü sahne daha aydınlık" tek düğüm değiştirir. Her değişiklikten önce eski JSON revisions/ altına zaman damgasıyla kopyalanır.


Neden model adı göremezsin

Bu depoda hiçbir fal model adı sabit yazılı değildir. Katalog, şemalar ve fiyatlar çalışma anında fal MCP'den çekilip yerel önbelleğe yazılır (7 gün TTL). fal yeni bir video modeli çıkardığında ya da bir endpoint kaldırdığında plugin'i güncellemen gerekmez.

Tek istisna ffmpeg-api ailesidir — o bir üretim modeli değil, montaj altyapısı. Şeması ve fiyatı yine canlı okunur.


Sorun giderme: 401 alıyorsan

İki bambaşka sorun aynı kodla geliyor. fal'ın mesajını oku:

Mesaj Anlamı
malformed Authorization header Anahtar Claude Code sürecine ulaşmıyor — başlık boş gitti
Invalid API key Anahtar ulaşıyor ama fal kabul etmiyor — yanlış veya süresi dolmuş

"malformed Authorization header" — Windows'un klasik tuzağı

[Environment]::SetEnvironmentVariable(...,'User') yalnızca kayıt defterine yazar. Zaten açık olan bir terminal kendi ortam bloğunu başladığı andan taşır ve içinden başlattığı her programa o eski bloğu devreder.

Yani Claude Code'u kapatıp açmak yetmez — onu doğuran terminal hâlâ eski ortamda.

Çözüm sırası:

  1. En kolayı: /fal-butler:setup <anahtarın> çalıştır. Anahtar ~/.claude/settings.json'a yazılır, işletim sistemi ortamına hiç bağlı kalmazsın, tuzak tamamen ortadan kalkar.
  2. Ortam değişkeninde ısrar ediyorsan: tüm terminal pencerelerini kapat, yeni bir PowerShell aç ve Claude Code'u başlatmadan önce doğrula — $env:FAL_KEY.Length anahtarın uzunluğunu yazmalı.
  3. Hemen lazımsa: $env:FAL_KEY = [Environment]::GetEnvironmentVariable('FAL_KEY','User'); claude

Anahtarın geçerli mi — ücretsiz test

Model çalıştırmadan, yalnızca JSON-RPC el sıkışmasıyla. Para harcamaz:

$k = [Environment]::GetEnvironmentVariable('FAL_KEY','User')
$body = '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}'
Invoke-WebRequest -Uri 'https://mcp.fal.ai/mcp' -Method Post -Headers @{
  'Authorization'='Key '+$k; 'Accept'='application/json, text/event-stream'; 'Content-Type'='application/json'
} -Body $body -UseBasicParsing | Select-Object -ExpandProperty StatusCode

200 → anahtar geçerli, sorun taşımada. 401 → anahtar geçersiz.


Import — sahada doğrulandı

2026-08-05: üretilen workflow.json fal Workflow Builder'a import edildi ve hatasız kabul edildi (25 düğümlük bir kampanya). Biçim doğru.

Import fal panelinden elle yapılır. Programatik oluşturma mümkün değil: POST /workflows ADMIN anahtarı ister, normal FAL_KEY 403 döner.

Bunun bir sonucu var: workflow'un fal tarafından kabul edilip edilmeyeceği API'den doğrulanamaz, dolayısıyla validate-workflow.mjs tek savunma hattıdır. O yüzden doğrulayıcı fal'ın contents seviyesindeki zorunlu alanlarını ve montaj düğümünün track yapısını da denetler — ikisi de sahada workflow'u çalışamaz hale getiren hatalardı.

Montajın üç sert sınırı

fal'ın ffmpeg-api/compose şeması gereği şunlar yapılamaz — plugin bunları baştan bilir ve plana yazmaz:

Sınır Sonuç
Geçiş alanı yok Yalnızca sert kesim; dissolve ve fade yok
Ses seviyesi alanı yok Zaman bazlı ducking imkânsız; müzik loudnorm ile baştan kısılır
Metin track'i yok Altyazı gömülemez — .srt yedek değil, tek seçenek

Getirdiği MCP sunucuları

Sunucu Ne için Nasıl
fal Model arama, şema okuma, fiyat, doküman https://mcp.fal.ai/mcp — HTTP. Kimlik Authorization: Key ${FAL_KEY} başlığıyla istek başına gönderilir, saklanmaz
context7 Kütüphane/SDK dokümanını güncel çekmek npx -y @upstash/context7-mcp
playwright fal doküman sayfalarını tarayıcıyla okumak npx @playwright/mcp@latest

context7 ve playwright ilk açılışta npx ile indirilir. Aynı sunucuları başka bir plugin de getiriyorsa ayrı ad alanlarında çalışırlar — çakışmaz, ama iki süreç açılır.


Ürettiği dosyalar

Hepsi senin repo'nda, .fal-butler/ altında — git'te izlenebilir:

.fal-butler/
  product.md                      # ürün profili — bir kez üretilir
  cache/                          # model şemaları ve fiyatlar (7 gün TTL)
  campaigns/2026-08-05-lansman/
    brief.md                      # röportaj cevapların + seed + sabit karakter bloğu
    storyboard.md                 # sahne sahne kurgu, düz Türkçe
    workflow.json                 # fal.ai'a import edeceğin dosya
    cost.md                       # maliyet dökümü ve ucuzlatma seçenekleri
    revisions/                    # her revizyonun öncesi

.gitignore'una şunu ekle:

.fal-butler/cache/

Önbellek yeniden üretilebilir; repo'da yer kaplamasın.


Geliştirme

Bağımlılık yok. Node.js ≥ 20 yeterli.

npm test                          # 69 birim testi — ağ çağrısı yapmaz, para harcamaz
node scripts/validate-plugin.mjs  # plugin yapısal bütünlüğü

validate-plugin.mjs şunları denetler: manifest alanları, skill adı ↔ dizin adı, agent adı ↔ dosya adı, anılan references/*.md dosyalarının varlığı, model değerinin geçerliliği, boş agent gövdesi ve joker MCP izni.

Tasarım dokümanı: docs/superpowers/specs/ — uygulama sırasında bilerek sapılan noktalar §16'da gerekçeleriyle listeli.

Lisans

MIT — bkz. LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选