Communitygithub.com

funi-ai/ads

Produção de anúncios publicitários a partir de fotos de produtos reais do usuário ou capturas de tela de apps/SaaS, com vídeos UGC e polidos (apresentador, unboxing, showcase, depoimento, TV spot) e anúncios estáticos com texto, respeitando fidelidade ao produto original e veracidade das alegações.

O que é ads?

Este skill (funi-ai/ads) é um sistema completo de produção de anúncios publicitários para agentes de IA (como Claude Code, Cursor ou Codex), focado em anúncios de produtos físicos e digitais que o usuário já possui. Ele aceita como entrada fotos de produtos, capturas de tela de aplicativos ou gravações de tela e gera anúncios em vídeo (UGC com apresentador, unboxing, showcase, depoimento, TV spot) ou estáticos (banners com texto), tudo em múltiplos idiomas (incluindo turco, português, etc.). A principal força do skill está em duas regras rígidas: (1) fidelidade do produto – cada quadro com produto físico parte da foto real do usuário passada por um endpoint de edição, e software é exibido apenas com capturas reais, nunca recriado por modelo generativo; (2) disciplina de alegações – cada afirmação, citação, número ou preço no roteiro ou na tela deve ter origem no material fornecido pelo usuário, nada é inventado. O skill gerencia todo o fluxo: pré-verificação, planejamento com custo, seleção de modelos (por exemplo, Seedance, Wan 3.0, ElevenLabs TTS, OmniHuman), geração de keyframes, clipes com áudio, legendas, música de fundo e montagem final, além de produzir um manifesto dos ativos gerados. Ele também decide automaticamente entre rotas A (geração direta de áudio e vídeo) e B (TTS + talking head + b-roll) conforme o idioma, duração e necessidade de precisão textual. O sistema respeita um orçamento de perguntas (3 perguntas antes do plano, com defaults), portão de custo (anuncia ou confirma acima de limites configuráveis) e reparo limitado (3 tentativas por etapa), sem nunca reinventar o produto ou fabricar depoimentos. Não deve ser usado para fotos de produto sem texto (use product-photoshoot), cartazes (use image), cards de listagem (use marketplace-cards), capturas de tela de loja (use launch-graphics), clipes únicos (use video), vídeos curtos orgânicos (use short-video) ou demonstrações de produto (use demo-video). O manifesto de saída inclui URLs públicas dos ativos gerados.

Funciona com✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/funi-ai/claude-plugins/tree/main/plugins/genmedia-skills/skills/ads

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Anúncios

Uma produção de anúncio encenada para um produto que o usuário já possui: fatos, roteiro, lista de planos, keyframes aprovados, clipes, voz, montagem, QA. Duas regras principais. Fidelidade do produto: cada quadro que mostra um produto físico começa a partir da foto do usuário através de um endpoint de edição, nada é reimaginado a partir de texto; software é mostrado apenas através das capturas reais e gravações de tela do usuário, compostas e nunca passadas por um modelo generativo (references/software-route.md). Disciplina de alegações: cada alegação, citação, número e preço no roteiro ou na tela tem origem em algo que o usuário forneceu; nada é inventado.

Passo 0 — Pré-verificação

command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
  • blockers não vazio, CLI ausente ou mais antigo que 0.7.0 → /genmedia-skills:setup. Chave ausente → o usuário executa genmedia setup ou exporta FAL_KEY por conta própria; aguarde. Nunca leia, imprima, solicite ou digite uma chave.
  • Mantenha config.announce_above_usd e config.confirm_above_usd (padrões 0.50 e 2) para o portão de custo, e ffmpeg.found para o caminho de montagem.
  • Retomar primeiro: Pesquise globalmente .genmedia/projects/*/plan.md. Um plano para este anúncio existe → leia-o, execute python3 "${CLAUDE_SKILL_DIR}/scripts/pipeline.py" urls --label <slug>, continue no primeiro passo inacabado. Nunca reinicie um projeto que tenha entradas no ledger. Um plano product-photoshoot para o mesmo produto → reutilize seu PRODUCT LOCK e stills aprovados como referências de keyframe.

Regras de UX

  1. Responda no idioma do usuário (Turco de entrada → Turco de saída). Prompts de modelo são em inglês; falas, legendas e texto na imagem permanecem no idioma do público, entre aspas, escritos exatamente como aprovados.
  2. Sem JSON, IDs de requisição ou narração de ferramentas no chat. Aguarde silenciosamente; no máximo uma linha de status por lote.
  3. Orçamento de perguntas: 3 antes do plano, uma de cada vez, como opções rotuladas (AskUserQuestion quando disponível), cada uma com um padrão que você usa quando o usuário pula. Ordem:
    • Produto: foto(s), ou para software as capturas reais e uma gravação de tela, além do que é e o que é verdade sobre ele. Nada anexado → peça; esta é a única pergunta sem padrão. Foto mas sem fatos → use apenas o que está impresso na embalagem e visível na foto, e liste o restante sob "Deixado de fora".
    • Apresentador e voz. Padrão: um apresentador sintético gerado combinando com o público, voz no idioma do público (o idioma em que o usuário escreve, a menos que indicado o contrário). Opções: gerado · um @handle · minha própria foto (consentimento) · sem apresentador.
    • Modo e plataforma. Padrão: UGC com apresentador falando, 15 s, 9:16 para feeds de formato curto. "Estático" → formato de headline, 4:5 mais 1:1. Pule toda pergunta que a solicitação já responder. Solicitação mais vaga ("faça um anúncio para isso") → todos os padrões, listados sob Suposições no card do plano. Consentimento, aprovação do plano e os pontos de verificação estão fora do orçamento.
  4. Paradas obrigatórias: o card do plano (sempre para vídeo; para estáticos quando o portão disser confirmar), keyframes antes de qualquer clipe, clipes e voz antes de música, legendas e montagem. Silêncio ou um trabalho bem-sucedido nunca é aprovação. Escolhas criativas (gancho, apresentador, take) pertencem ao usuário.
  5. Portão de custo sobre o plano inteiro incluindo cada variante: abaixo do anúncio → execute; entre → estimativa de uma linha e execute; no ou acima do confirmar → aguarde um sim. Nunca troque um modelo que o usuário nomeou; ofereça a rota mais barata como uma linha no card do plano.
  6. Reparo limitado: 3 tentativas por etapa, algo muda a cada vez, nunca reenvie uma rejeição de política inalterada. Um trabalho com um ID de requisição é retomado, nunca reenviado. Um reparo ou novo teste que por si só custe o limite de confirmação ou mais (um take falado do Seedance custa) precisa de um novo sim com o total acumulado; um trabalho falho pode já ter sido faturado.
  7. Segurança, não negociável: nenhum depoimento fabricado, clientes, avaliações, classificações, contagens de usuários, prêmios, alegações médicas, financeiras ou de renda, nenhuma urgência falsa ou preços inventados. O rosto ou voz de uma pessoa real precisa da confirmação de consentimento do usuário. Um apresentador gerado é uma pessoa sintética: diga isso na entrega e informe ao usuário que plataformas e algumas leis exigem divulgação; nunca descreva um como cliente. Sem nomes de concorrentes, logotipos ou embalagens. Uploads e resultados ficam em URLs públicas: diga isso uma vez antes de fazer upload de produtos não lançados ou fotos de pessoas. Regras e redação: references/scripts-and-claims.md.

Barreira de descoberta

references/routing-video.md, references/routing-audio.md, references/routing-image.md e references/routing-utility.md são caches datados (verificados em 2026-09-19). Cada endpoint distinto no plano é confirmado antes que o card do plano seja mostrado:

genmedia models --endpoint_id <id1>,<id2>,<id3> --status all --limit 50 --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
  • Cada ID deve retornar e estar active (sem --limit a chamada retorna no máximo 20 linhas: uma linha ausente não prova que um ID está morto, pergunte por ele sozinho novamente); caso contrário, pegue o próximo nível daquela tarefa na referência de roteamento, senão genmedia models "<nome>" --no-classify --limit 10 --json, a correspondência ativa mais recente, e diga qual modelo foi executado.
  • Nomes de campos, enums e limites vêm do schema, nunca da memória; eles não são transferidos entre famílias (prompt vs text, image_url vs start_image_url, "5" vs 5).
  • Nunca invente IDs ou campos. Nunca execute genmedia run sem um ID de endpoint. Novos lançamentos ficam sob namespaces de fornecedores (bytedance/, creatify/, openai/, minimax/, veed/), não apenas fal-ai/.

Roteamento

Tipo de produto. Um app, SaaS, ferramenta de desenvolvedor, extensão ou qualquer coisa cujo produto seja uma interface → a rota de software: leia references/software-route.md antes de planejar. Ela substitui as regras de keyframe e estáticas abaixo (sem edição de uma captura, sem texto assado por um modelo); roteiro, alegações, voz, música, legendas, montagem, portão de custo e pontos de verificação permanecem como escritos aqui.

Entregável. Palavras estáticas ("görsel", "banner", "static", "carousel", um headline dado) → formato estático, references/static-formats.md. Palavras de movimento ou voz, ou nada dito → vídeo, modo de references/ad-modes.md: presenter (padrão), how-to, unboxing, showcase, problem-solution, testimonial (apenas com uma citação real que o usuário forneça), tv-spot.

Rota de produção para vídeo (primeira correspondência vence):

SituaçãoRota
Sem fala na câmera: showcase, TV spot ou how-to com voz sobrepostaB sem a cabeça falante: b-roll + voz sobreposta + música
Idioma falado não é inglêsB. Turco na rota A apenas no Wan 3.0, nunca no Seedance: em uma escuta nativa (references/platform.md seção 10) o Wan estava correto, enquanto toda versão do Seedance pronunciou errado (ş como s, "merhala"); Veo 3.1 Lite, impecável lá, não está mais listado no fal. A apenas depois que um clipe de teste passou pela verificação de escuta do usuário
Redação deve ser exata (marca, preço, linha legal), uma voz de marca fixa, ou a mesma voz entre variantesB: TTS diz exatamente o texto; modelos de áudio nativos parafraseiam e pronunciam errado
Mais longo que 15 s, ou apresentador mais cortes de b-rollB
Inglês, um take contínuo de 6 a 15 s, apresentador fala para a câmeraA
  • Rota A: uma geração fala a linha. Keyframe aprovado (apresentador com o produto real) → imagem-para-vídeo com áudio nativo.
  • Rota B: TTS por bloco (blocos na câmera, blocos de voz sobreposta) → cabeça falante apenas para os blocos na câmera → b-roll a partir de keyframes aprovados → montar. Voz primeiro: sua duração medida define a duração de cada clipe.

Padrões de função (ativos em 2026-09-19; palavras de preço são dicas datadas, gm.py price decide)

FunçãoEndpointPor quêDica de preço
keyframe, apresentador ou cena com o produtobytedance/seedream/v5/pro/editaté 10 referências mantêm produto e apresentador~USD 0.07/imagem + USD 0.0045 por referência extra
cartão final, anúncio estático, qualquer quadro com texto exatoopenai/gpt-image-2.5/flare/editmelhor fidelidade de texto, até 16 referências~USD 0.06/imagem em quality: "high"
placa de apresentador gerado (apenas uma pessoa, nunca o produto)bytedance/seedream/v5/pro/text-to-imagepadrão de qualidade para pessoas~USD 0.07/imagem
A: clipe falado, qualidadebytedance/seedance-2.5/us/image-to-videoarena #1 para fala sincronizada com lábios nativa; 4 a 30 s~USD 0.57/s em 720p, ~USD 0.26/s em 480p
A: clipe falado, Turcoalibaba/wan-3.0/image-to-video (start_image_url)o único modelo de áudio nativo listado cujo Turco passou por uma escuta nativa (2026-09-21); duration inteiro, defina resolution~USD 0.05/s em 480p, ~USD 0.10/s em 720p
A: clipe falado, rascunho ou orçamento, Inglêscreatify/borealconstruído para anúncios; prompt [VISUAL] [SPEECH] [SOUNDS]; sua página de modelo nomeia o Inglês como idioma validado; rótulo opcional de IA visível~USD 0.01/s em 720p
B: voz, Inglêsfal-ai/elevenlabs/tts/eleven-v3TTS padrão~USD 0.10 por 1000 caracteres
B: voz, Turco e outros idiomas listadosfal-ai/gemini-3.1-flash-ttsenum language_code lista "Turkish (Turkey)"; style_instructions~USD 0.05 por 1000 caracteres
B: cabeça falantefal-ai/bytedance/omnihuman/v1.5imagem + áudio; abaixo de 60 s em 720p~USD 0.16/s de áudio
B: cabeça falante, rascunhoveed/fabric-1.0 em 480pmetade do preço; resolution é obrigatório~USD 0.08/s
b-roll, qualidadebytedance/seedance-2.5/us/image-to-videoend_image_url opcional para revelações~USD 0.57/s em 720p
b-roll, rascunho ou orçamentominimax/h3-max-turbo/image-to-videocentavos por clipe~USD 0.04/s em 768P (desconto de lançamento encerrado em 2026-09-30)
música de fundoelevenlabs/music/v2.5duração exata via music_length_ms~USD 0.60 por minuto iniciado
legendasfal-ai/workflow-utilities/auto-subtitle; texto exato (qualquer idioma): veed/subtitlesqueimadas sem drawtext local~USD 0.03/min; veed ~USD 0.10/min, mínimo de 1 min
concat, mux, redimensionar, clipe de cartão finalffmpeg local, senão references/routing-utility.mdgratuito e exato quando ffmpeg.foundcentavos

Desempates:

  1. O usuário nomeou um modelo → use-o após a verificação ao vivo; mencione o padrão em uma linha, nunca troque silenciosamente.
  2. Rota de qualidade cruza o limite de confirmação (um take de 15 s do Seedance 2.5 em 720p custa cerca de USD 8.50) → o card do plano mostra o preço de qualidade e o preço do nível de rascunho lado a lado; o usuário escolhe. Nunca escolha o barato silenciosamente.
  3. @handle → /genmedia-skills:character resolve para URLs de referência e texto âncora; use-os como referências de apresentador no trabalho de keyframe. Nunca deixe @handle em um prompt.
  4. Nenhuma foto do produto → peça uma (software: capturas). Nenhuma existe → apenas conceito: passe para /genmedia-skills:image e diga que não será o produto real deles. Software sem capturas recebe um roteiro e uma lista de capturas, nunca uma interface inventada.
  5. Capturas de tela de listagem de loja, cards de link ou imagens do Product Hunt, e qualquer "creative" do Apple Ads (a Apple constrói seus anúncios a partir da página do produto) → /genmedia-skills:launch-graphics. Apenas stills de produto sem texto desejados → /genmedia-skills:product-photoshoot. Um único clipe sem roteiro → /genmedia-skills:video. Um curta orgânico sem intenção de anúncio → /genmedia-skills:short-video. Um explicador narrado → /genmedia-skills:video-explainer. Cards de listagem de marketplace → /genmedia-skills:marketplace-cards. Uma thumbnail ou capa → /genmedia-skills:youtube-thumbnail.

Armadilhas nomeadas:

  • Produto reimaginado. Texto-para-vídeo ou texto-para-imagem desenha um sósia. Cada quadro do produto é uma edição da foto do usuário, e cada clipe do produto começa a partir de um keyframe aprovado.
  • Interface gerada. Uma edição, texto-para-imagem ou trabalho de vídeo que toque uma captura retorna UI com erros de ortografia, inventada, e plataformas rejeitam anúncios que mostram funcionalidade que o app não possui. Pixels de UI vêm de páginas launch-graphics e da gravação; movimento vem da gravação ou de um push local.
  • Texto de um modelo de vídeo. Headlines, preços, logotipos, legendas e linhas legais de um modelo de vídeo saem distorcidos. Deixe espaço negativo no keyframe; o texto chega no cartão final (modelo de tipografia), como legendas queimadas, ou no editor do usuário.
  • Fala Kling. O Kling v3 fala apenas Chinês ou Inglês e traduz automaticamente todo o resto para o Inglês. Nunca roteie diálogo em Turco para lá.
  • Canvas Flashtalk. O schema de fal-ai/flashtalk documenta uma saída paisagem fixa de 768x448: sem utilidade para um anúncio 9:16. Cabeças de rascunho vão para veed/fabric-1.0.
  • Mux corta para a entrada mais curta. fal-ai/ffmpeg-api/merge-audio-video tem a duração da mais curta entre imagem e som (uma voz longa perde seu final, uma curta corta a imagem) e substitui o áudio próprio do clipe. Mesmo comprimento para ambos, sempre.
  • duration: "auto" no Seedance torna o custo incognoscível. Sempre defina-o. Boreal e MiniMax aceitam um número, Seedance uma string.
  • Padrão OmniHuman. resolution padrão é 1080p (áudio abaixo de 30 s). Envie "720p" a menos que o usuário tenha solicitado 1080p.
  • Cliente sintético. Um rosto gerado dizendo "Perdi 8 quilos" é um depoimento fabricado, qualquer que seja o nome no prompt. Veja references/scripts-and-claims.md.

Fluxo de trabalho

  1. Triagem dentro do orçamento de perguntas. Escolha um slug (serum-ugc): é o label do lote, o filtro do ledger, genmedia-output/<slug>/ e .genmedia/projects/<slug>/. Qualquer rótulo em linguagem natural funciona; auxiliares transliteram letras turcas. Plataforma → proporção e duração: references/ad-modes.md (tabela de plataforma; verifique as especificações atuais de anúncio da plataforma).
  2. Olhe para cada foto do produto com a ferramenta Read. HEIC, AVIF, TIFF ou CMYK → converta para PNG ou sRGB JPEG primeiro (references/troubleshooting-ads.md). Escreva o PRODUCT LOCK em .genmedia/projects/<slug>/plan.md: forma, proporções, materiais, cores, texto do rótulo literal, o que nunca deve mudar, quais lados não são visíveis.
  3. Ficha de fatos. Liste o que é verdade sobre o produto e de onde cada fato veio: a mensagem do usuário, notas da marca, a própria embalagem ou uma página do produto.

... [truncado para tradução]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

funi-ai/demo-video

Product demos, store previews, App Store header/search videos and loops cut from the user's REAL screen recording: trimmed, sped, zoomed, framed, captioned, voiced with local ffmpeg. Models add only what is not the product: narration (Eleven v3, Gemini TTS for Turkish), music and UI sound. Use when: "make a demo video of my app", "App Store preview video", "App Store header video", "Google Play promo video", "turn this screen recording into a demo", "GIF loop for my changelog", "Product Hunt launch video", "ekran kaydımdan tanıtım videosu yap", "changelog için GIF döngüsü". Chain: takes recordings, device frames (`layers`) and end cards from `launch-graphics`; produces MP4, WebM, GIF, SRT/VTT and posters. NOT for: generated b-roll shorts (use `short-video`); explainers with generated pictures (use `video-explainer`); paid ads (use `ads`); store screenshots, link cards (use `launch-graphics`); one generated clip (use `video`); voice or music alone (use `audio`); joining finished files (use `pipelines`).

funi-ai/youtube-thumbnail

Thumbnails and covers that survive at small size: YouTube thumbnails (16:9), Shorts, Reels and TikTok covers (9:16), podcast and course covers (1:1), from a title plus an optional face photo, @handle character, brand colours or a frame of the user's own video. Text baked in by GPT Image 2.5; faces locked through reference edits. Use when: "make a thumbnail for my video", "YouTube thumbnail with my face", "Shorts cover", "podcast cover art", "thumbnail from this frame", "change only the text on the thumbnail", "videoma thumbnail yap", "kapak görseli hazırla", "küçük resimdeki yazıyı değiştir". Chain: consumes an @handle from `character` and stills or frames from `image` and `video`; produces sized PNG and JPEG. NOT for: posters, photo edits (use `image`); logos (use `brandkit`); link cards, OG images (use `launch-graphics`); ad creatives (use `ads`); the video (use `video`, `short-video`); new characters (use `character`); batches (use `pipelines`); model choice (use `models`); setup problems (use `setup`).

Habilidades Relacionadas