Dali by Lulu

io.github.Lulu-The-Narwhalv0.6.1更新於 Oct 10, 2026

The prediction MCP — score your prompt before you generate, so you never waste a credit.

已驗證Streamable HTTP可網頁執行Data & AnalyticsBusiness & CommerceMedia & Design

概覽

AI 產生的概覽

在消耗生成額度之前,用長期投放的獲勝廣告語料為 AI 圖像與影片提示詞及廣告素材評分。

功能
Dali 對生成提示詞給出 0 到 100 的評分與各維度明細,分數偏低時同時回傳改寫要點。它也能為實際廣告圖片評分,圖片可來自 URL 或對話中分享的圖片,並與已驗證的獲勝素材比對,列出缺少的高提升屬性。其他工具可排序多個提示詞變體、依概念與預算推薦生成模型,並提供社群模式與基準。
適用情境
適合在生成圖像或影片廣告之前使用,以便在付費重試前發現薄弱提示詞或不符合套路的素材。面向美妝、健康、補給品、健身、食品、服飾、科技與寵物等垂直領域的投放工作流程。
執行需求
可使用無需宣告驗證的託管遠端端點,或透過 Python 以 stdio 執行本機 PyPI 套件 dali-mcp。自架套件只提供提示詞評分工具;素材評分與獲勝廣告語料需要連線託管伺服器。使用託管端點需要網路存取。
安裝前請注意
託管端點宣告為無需驗證,請留意送出的資料。score_creative 需要圖片 URL,analyze_winning_formula 需要你的廣告 CSV 與電子郵件地址,可能暴露投放成效資料。track_enhancement 會把提示詞前後對照記錄到共享圖譜中。評分依據是廣告投放時長,而非實測轉換率。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Dali by Lulu,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "dali": {
      "type": "http",
      "url": "https://dali.getlulu.dev/mcp"
    }
  }
}

README

Dali by Lulu

[Dali by Lulu — creative intelligence MCP]

dali.getlulu.dev  ·  Install  ·  Live stats  ·  Lulu

[Dali by Lulu — featured on Product Hunt]

[PyPI version] [PyPI downloads] [npm version] [npm downloads] [MIT License] [MCP Server] [Live]


Score your creative against what's actually winning in the ad market — before you spend the credit.

Most AI generation failures are predictable. A weak prompt, an off-formula creative — you can't tell until after you've burned the token. Dali scores it first, and it doesn't grade against opinions or generic "prompt tips." It grades against a real, living corpus of proven-winning ads — creatives still running in the market months after launch, scraped, embedded, and ranked. Two jobs:

  • score_prompt — judge the prompt before you generate (craft: camera, motion, lighting, model-native language).
  • score_creative — judge the actual image against proven winners (does it look like what converts, and what's missing).

Every wasted generation has a real cost — a Seedance retry is ~$6. The live dashboard tracks what the community has saved by catching bad creatives before they burned a credit.

You: "make a video ad for our glass serum bottle"
dali::score_prompt(prompt, "veo3")→ 8/100  Grade: F→ no camera move · no motion · no lighting · 8 words→ Verdict: Generic stock footage guaranteed. Enhance first.→ enhancement_brief included (score < 70):
  ① lead with camera — Veo 3's #1 lever: "Slow dolly", "Orbital push"  ② describe physics: "a drop falls", "liquid ripples", "glass refracts"  ③ lighting type + quality: "warm backlight", "rim-lit edges"  ↳ [Camera]. [Subject + motion]. [Lighting]. [Mood]. [No text.]
✦ YOUR LLM rewrites using the brief:
  "Slow orbital push around a glass serum bottle on white marble. A single   amber drop falls in extreme slow motion, catching warm backlight. Macro:   liquid gold ripples outward from impact. Rim-lit edges, soft studio   diffusion. Premium, clinical. No text."
dali::score_prompt(enhanced, "veo3")→ 91/100  Grade: A  ✓ Safe to generate.

The real winning data layer

This is what makes Dali more than a prompt linter. The scores are grounded in real ads that are actually winning, not hand-written rules.

How the corpus is built — longevity is the outcome signal. We scrape the public Meta Ad Library. An ad still running months after it launched is one the advertiser keeps paying for — a proven winner. That "still-running-after-N-days" longevity is a market-validated label you can't fake, and it's the spine of the whole dataset.

What's in it, today:

Ads ingested10,204 (14,100 raw archive)
Proven winners (long-running)3,808
Distinct advertisers4,121
Verticals8 — beauty, wellness, supplements, fitness, food, apparel, tech, pets
Winner creatives embedded800 (1408-dim, balanced ~100/vertical)
Longest-running winner seen2,431 days (6.6 years live)

The pipeline (offline → serving). The tools never scrape or embed on the fly — they read pre-built stores:

scrape Meta Ad Library         → proven winners (longevity label)      → Gemini vision           → creative attributes (lighting, format, before/after, offer…)      → prevalence SQL          → winning-pattern lift per vertical (winners vs baseline)      → Vertex embeddings       → BigQuery VECTOR_SEARCH (nearest proven winners, cosine)      → graph edges (Memgraph)  → (:Pattern)-[:WINS_IN {lift, n}]->(:Category)

So when score_creative runs, it embeds your image and finds the actual winning ads it most resembles by full visual signature — then tells you which winning attributes you're missing. When enhance_prompt runs with a category, the rewrite brief is backed by real market lift ("before/after shows up in 78% of winning wellness ads, 4× baseline"), not craft opinion.

Honest scope. The winner label is longevity (a strong market-validated proxy), not per-ad conversion rate — measured CVR validation is in progress. The corpus grows on a schedule, so coverage per vertical keeps deepening. What you get today: your creative scored against what's demonstrably surviving in the live market.

dali::score_creative(image_url, "beauty")→ score 62/100  — partial resemblance to proven winners→ looks_like:      Frøya Organics (ran 411d), tashportcosmetics (884d), Face Reality (346d)→ what_to_change:  winners use "before/after" 4× more · offer-visible 1.8× more→ defects:         none→ Verdict: Partial — strong resemblance, but add the high-lift attributes before spending.

Contents


Install

Hosted MCP — connect once, scores every prompt and creative:

bash
# Claude Codeclaude mcp add --transport http dali https://dali.getlulu.dev/mcp
json
// Cursor / Windsurf — .cursor/mcp.json or windsurf settings{  "mcpServers": {    "dali": { "url": "https://dali.getlulu.dev/mcp" }  }}
json
// stdio-only clients — npx wrapper around the hosted server, no Python needed{  "mcpServers": {    "dali": { "command": "npx", "args": ["-y", "dali-mcp"] }  }}

→ Full install guide with all clients

Self-hosted — local, no auth required:

bash
pip install dali-mcpclaude mcp add dali -- python -m dali.server

The self-hosted package exposes the prompt-scoring tools locally. The creative-scoring tools (score_creative, analyze_winning_formula) and the winning-ad corpus run on the hosted server — connect via the hosted MCP to use them.


Tools

Score the creative — against real winners

ToolWhat it does
score_creative(image_url, category)Score an actual ad image. Embedding similarity to proven winners is the headline score; also returns the winners it resembles, which winning attributes it's missing, and generation defects — in one call
score_creative_from_view(category, …)Score an image you're looking at (pasted/attached in the chat) — no URL. The model reads the creative's attributes and Dali scores them against the winning corpus (verdict + what to change). Use for images shared in-conversation; score_creative (URL) adds the embedding headline
analyze_winning_formula(csv, category, email)Paste your own ads export (creative URL + CPA/CTR/ROAS) → your winning formula vs your losers, plus how you compare to the industry median

Score the prompt — before you generate

ToolWhat it does
score_prompt(prompt, model, category?)Grade 0–100 with a per-dimension breakdown and verdict. When the score is weak, the rewrite brief is returned in the same call. Reads intent with the conversation LLM (understands negation, any language)
enhance_prompt(prompt, model, category?)Returns a structured rewrite brief — YOUR LLM writes the enhanced prompt. With a category, the brief is backed by real winning-ad lift
track_enhancement(original, enhanced, generator)Record a before/after pair in the graph brain — trains community patterns
score_variations(prompts, generator)Rank a list of prompt variants in one call — highest to lowest
suggest_generator(concept, budget_usd_max)Pick the best model for your concept + budget

The graph brain & meta

ToolWhat it does
creative_patterns(model)Community top patterns for this model from the graph
community_benchmark(prompt, model)Compare your prompt against community top scorers
prompt_neighbors(prompt, model)Find A/B-grade prompts that share your patterns (score the prompt first, so its patterns are in the graph)
analyze_intent(prompt)Parse dimensions: camera, motion, lighting, style, mood, gaps
my_story()Your scoring history, model stats, grade distribution
list_generators()All supported models with medium and core strength
dali_version()Server version + changelog

Supported models

Video

ModelPlatformsBest forPrompt style
veo3Higgsfield, Google AI Studio (veo-3.1-generate-preview), RunwayCinematic brand films, narrative ads, photorealistic motionCamera move → Subject → Action → Location → Lighting → Mood
seedanceHiggsfield, fal.ai (bytedance/seedance-2.0)UGC, social-native content, TikTok/Reels performance adsNatural language, motion-first, authentic feel
klingHiggsfield (kling3), Kling.ai (kling-v3-text-to-video)Character animation, product showcases, facial performanceScene → Characters → Action → Camera → Style; multi-shot labels
runwayRunway (gen4_turbo)VFX, character performance, cinematic motionMotion-first — describe what moves, not what exists
wanfal.ai (fal-ai/wan/v2.7/text-to-video)4K, 20-second clips, native audio, open-source workflowsScene → Motion → Sound → Duration → Mood
minimaxfal.ai (fal-ai/minimax/hailuo-02/pro/text-to-video)Cinematic storytelling, character animationNatural language + [camera movement] bracket syntax
higgsfieldHiggsfield (native model)Physics-driven motion — cloth, hair, fluid, particlesDescribe materials in motion, not motion abstractly

Sora 2 (OpenAI): API shutdown September 24, 2026. Do not build new dependencies on it — use Runway or Kling instead.

Image

ModelPlatformsBest forPrompt style
fluxBFL API (flux-pro-v1.1), fal.ai, ReplicatePhotorealism, technical photography, product shots30–80 words; camera body + lens specs; front-load subject
midjourneyMidjourney (v8.1)Artistic depth, editorial, stylized illustrationProse + params appended: --ar 16:9 --s 300 --v 8.1 --style raw
ideogramIdeogram API (V_4), fal.aiTypography, logos, text-in-image, graphic designDescribe text exactly in quotes inside the prompt
fireflyAdobe Firefly 5 (enterprise)IP-indemnified commercial assets, 4MP brand contentNatural language + contentClass and style.presets API params

Imagen 4 (Google): deprecated — use gemini-3.5-flash with image output. Dali still scores legacy Imagen prompts via the imagen model key but don't build new things on it.


Platform supersets

Higgsfield and Runway are aggregator platforms — they proxy multiple underlying models under one API. The model you pick matters more than the platform name:

PlatformModel selectorUnderlying model
Higgsfieldveo3Google Veo 3.1
HiggsfieldseedanceByteDance Seedance 2.0
Higgsfieldkling3Kling 3
Higgsfieldwan2-7Wan 2.7
Higgsfieldimage2videoHiggsfield native
Runwayveo3Google Veo 3.1
Runwaygen4_turboRunway Gen 4.5
RunwayseedanceByteDance Seedance 2.0

Dali scores for the underlying model's native prompt language, not the platform wrapper. Pass the model name (veo3, kling, seedance…), not the platform name.


Why model-specific?

Generic prompt optimizers don't know that:

  • Veo 3.1 needs camera movement specified above everything else
  • Kling 3 supports multi-shot scene labels natively in the prompt
  • Flux responds to camera body and lens names like a photographer ("Sony A7 IV, 85mm f/1.4")
  • Midjourney V8.1 reads prose + parameters, not keyword lists
  • Higgsfield simulates physics — you describe materials in motion, not motion abstractly
  • Minimax uses [Pan left] bracket syntax for camera moves — plain text camera commands are ignored
  • Ideogram V4 needs text quoted exactly in the prompt for typography accuracy
  • Wan 2.7 generates native audio — include sound descriptions alongside visuals

Dali has a separate scoring rubric and rewrite brief for each model. Your LLM does the creative rewriting — Dali provides the intelligence.


MCP resources

creative://guide/veo3       → Veo 3.1 camera language guidecreative://guide/seedance   → Seedance UGC motion guidecreative://guide/kling      → Kling multi-shot + expression guidecreative://guide/runway     → Runway motion-first guidecreative://guide/wan        → Wan 2.7 audio + motion guidecreative://guide/minimax    → Minimax bracket camera guidecreative://guide/higgsfield → Higgsfield physics-motion guidecreative://guide/sora       → Sora 2 guide (API shutdown Sep 24, 2026)creative://guide/flux       → Flux photography brief guidecreative://guide/midjourney → Midjourney V8.1 + parameters guidecreative://guide/ideogram   → Ideogram V4 typography guidecreative://guide/firefly    → Firefly 5 commercial content guidecreative://guide/imagen     → Imagen 4 guide (deprecated Aug 17, 2026)creative://models           → All models overview

Contributing

Model guides live in dali/data/guides/{model}.json on the hosted server. Found practitioner patterns that consistently produce high-grade results? Open an issue with the model, the pattern, and a sample prompt + result. The best contributions come from Reddit, Discord, and YouTube — real practitioners, not official docs.

→ Prompt best practices by model — cheat sheets, do/don't tables, top patterns per model → Dali creative flow skill — install this skill so your LLM follows the score → enhance → generate workflow automatically


MIT License · Built by Lulu · dali.getlulu.dev

來源:README.md,提交 bcefc78

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v0.6.1最新Sep 16, 2026