bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
翻译准备中
Skill que transforma assunto/link em plano profissional de edição de vídeo (renderer-agnóstico) + render opcional via FFmpeg/Auto-Editor/HyperFrames
翻译准备中
技能HTML · PythonGitHub @inematds自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
安装型项目无需部署域名也可验证。个人仓库可通过 GitHub 登录验证,组织仓库可使用上方的仓库验证文件。
正在加载完整 README。 以下为已保存的摘录。
Skill (Claude Code) + pacote Python que transforma um assunto ou um link (página/vídeo) num plano profissional de edição de vídeo — dado estruturado, renderer-agnóstico — e, opcionalmente, renderiza o vídeo. Você passa um assunto/link → a skill detecta o tipo de input, analisa a melhor ação de edição, escolhe um preset de estilo e emite plano-edicao.json + RESUMO.md. O render é opcional e já funciona: motion graphics (HyperFrames) + b-roll gerado no flux2-klein — local, determinístico, sem chave de API.查看完整 README ↗
Skill (Claude Code) + pacote Python que transforma um assunto ou um link (página/vídeo) num plano profissional de edição de vídeo — dado estruturado, renderer-agnóstico — e, opcionalmente, renderiza o vídeo.
Você passa um assunto/link → a skill detecta o tipo de input, analisa a melhor ação de edição, escolhe um preset de estilo e emite
plano-edicao.json+RESUMO.md. O render é opcional e já funciona: motion graphics (HyperFrames) + b-roll gerado no flux2-klein — local, determinístico, sem chave de API.
A edição programática de vídeo é fragmentada: FFmpeg (CLI bruto), Auto-Editor (corte por análise), MoviePy (Python), Remotion (React), HyperFrames (HTML→MP4). Falta a camada que, a partir de linguagem natural, decide o que fazer e emite um plano de edição limpo e portável. É isso que esta skill faz — e o plano, sendo JSON renderer-agnóstico, pode ser consumido por qualquer um desses backends ou por outros sistemas.
Requer Python ≥ 3.11.
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
Isso expõe o console script vpe.
# 1. Gerar o esqueleto do plano a partir do input + preset
vpe scaffold "como fazer pão caseiro" --preset viral > plano-edicao.json
# 2. (a skill preenche a timeline criativa — veja examples/)
# 3. Validar os guardrails antes de qualquer render
vpe validate plano-edicao.json
# 4. Gerar o resumo legível para aprovação
vpe resumo plano-edicao.json > RESUMO.md
input (assunto | link de página | link de vídeo)
│
▼
detect ─→ ingest+analyze ─→ best action ─→ preset de estilo ─→ PLANO (json + resumo)
│
(opcional) ▼
render → MP4
vpe/detect.py): classifica o input em topic, page ou video (por
URL, extensão e domínio).SKILL.md) decide o modo — vídeo gerado para
assunto/página, corte de footage real para vídeo — e registra o porquê em
intent.best_action_rationale.acao | suave | promo | vendas | viral (perfis de parâmetro).EditPlan, pydantic) + RESUMO.md legível.vpe scaffold — detecta o input e aplica o preset$ vpe scaffold "https://youtu.be/dQw4w9WgXcQ" --preset viral --title "Corte Viral"
{
"version": "1.0",
"meta": { "title": "Corte Viral", "language": "pt-BR" },
"source": { "kind": "video", "ref": "https://youtu.be/dQw4w9WgXcQ", "media": null },
"intent": {
"goal": "viral",
"best_action_rationale": "Input classificado como 'video'; preset 'viral' sugere objetivo 'viral'. ..."
},
"style": {
"preset": "viral",
"pacing": { "avg_cut_seconds": 1.1, "energy": 0.95 },
"transitions": ["cut", "zoom"],
"music": { "energy": 0.95 },
"captions": { "enabled": true, "style": "karaoke", "position": null },
"color": { "look": "punchy" }
},
"output": { "aspect": "9:16", "duration_target_seconds": 30.0, "platform": "generic" },
"timeline": [],
"render": { "engine_hint": "auto" }
}
O input do YouTube foi classificado como
videoe o presetviraljá aplicou corte ~1.1s, legenda karaoke e aspect 9:16. Atimelinenasce vazia — é preenchida pela skill.
vpe validate — guardrails antes do render$ vpe validate examples/exemplo-viral-pao.json
$ echo $?
0
Plano com problemas reporta os itens (e retorna código 1 se houver [error]):
[error] empty_timeline: timeline tem 0 itens
[warning] no_hook: plano sem cena de hook
vpe resumo — documento legível para aprovação$ vpe resumo examples/exemplo-viral-pao.json
# Pão caseiro em 20s
- **Fonte:** topic — como fazer pão caseiro rápido
- **Objetivo:** viral
- **Por que essa ação:** Assunto curto, visual e com payoff imediato — ideal para vídeo gerado vertical com cortes rápidos.
- **Preset:** viral (corte ~1.1s, energia 0.95)
- **Saída:** 9:16, alvo 20.0s, tiktok
## Timeline
1. **hook** (`s1`)
- Headline: Pão em 20 segundos?!
- Narração: Olha só que rápido.
- Legenda [0.0-1.5]: Pão em 20s?!
2. **point** (`s2`)
- Headline: 3 ingredientes
- Narração: Farinha, água e fermento.
- Legenda [1.5-4.0]: Só 3 ingredientes
3. **cta** (`s3`)
- Headline: INEMA.CLUB
- Narração: Receita completa no inema ponto club.
- Legenda [18.0-20.0]: inema.club
Veja o plano completo de exemplo em examples/exemplo-viral-pao.json.
| Preset | corte médio | transições | trilha | legenda | aspect | uso |
|---|---|---|---|---|---|---|
| acao | 1–2s | whip/zoom | alta | karaoke | 9:16 | dinâmico |
| suave | 4–6s | crossfade | baixa | minimal | 16:9 | institucional |
| promo | 2–3s | cut+zoom | média-alta | block | 16:9 / 1:1 | clipe promocional |
| vendas | 2–4s | cut | média | block + CTA | 16:9 / 9:16 | VSL/oferta |
| viral | 0.8–1.5s | jump cut | alta | karaoke | 9:16 | TikTok/Instagram |
Cada preset é um perfil de parâmetros sobre o mesmo schema — trocar o preset muda ritmo/transições/trilha/legenda/aspect sem reescrever o plano base.
EditPlan)JSON serializável (pydantic 2). Campos principais:
| Bloco | Conteúdo |
|---|---|
meta | title, language |
source | kind (video/page/topic), ref, media (duration/fps/resolution) |
intent | goal (highlights/supercut/promo/explainer/sales/viral), best_action_rationale |
style | preset, pacing{avg_cut_seconds,energy}, transitions[], music{energy}, captions{style}, color{look} |
output | aspect (16:9/9:16/1:1), duration_target_seconds, platform |
timeline[] | id, role (hook/intro/point/broll/cta), source_in/out (corte real) ou content{headline,narration,broll_query} (cena gerada), captions[], overlays[], transition_out |
render | engine_hint (auto/ffmpeg/hyperframes) |
SKILL.md)vpe scaffold "<input>" --preset <...> → esqueleto do plano.timeline (roteiro/cenas para assunto/página; source_in/out para vídeo).vpe validate → zera os [error].vpe resumo → mostra ao usuário para aprovar.Identidade default PT-BR; CTA INEMA.CLUB como última cena em vídeos gerados (desligável).
knowledge/)O que dá "talento" à skill — vocabulário e padrões que ela usa para criar (não copiar). A composição de cada vídeo é autoral; estes arquivos são os blocos de construção.
| Pilar | Conteúdo |
|---|---|
strategy/ | NARRATIVA — Viral5, Save the Cat, Hero, Hook-Value-CTA, hooks 3s, cases, formatos (Reels/VSL/Autoridade), templates, matriz, checklist |
camera/vocabulary.md | linguagem de câmera (ponte: vira prompt e parâmetro de motion) |
storyboard.md | direção de cena — conflito visual, câmera por função, continuidade sagrada, freeze final (absorvido do MDD) |
prompting/ | expandir cada beat em prompt cinematográfico; clip-direction.md = prompt-final + negativo |
motion/ | eases cinematográficos, recipes GSAP/CSS time-driven, texturas feTurbulence (grão/halação sem assets) |
archetypes/ | cenas prontas (HTML+CSS+GSAP), ex.: cinematic-hero |
tokens.md · pacing.md | identidade (paleta/fontes) e ritmo (word-by-word, pattern interrupt) |
Integração com o MDD (mestre-direcao-dinamica): para beats
render_kind: generated_clip/generated_still, a skill delega a direção cinematográfica
ao MDD — que devolve storyboard painel-a-painel + prompt final + prompt negativo de
qualidade de diretor. video-plan-editor é o orquestrador (estratégia → plano →
execução); o MDD é o motor de direção dos beats generativos. Os princípios do MDD
(conflito visual, continuidade, freeze, CTA fora do prompt) estão destilados em
knowledge/storyboard.md e knowledge/prompting/clip-direction.md.
Local, determinístico, sem chave de API (HyperFrames = Chrome headless + FFmpeg). Receita
completa em knowledge/render.md. Resumo:
vpe validate ok) + narração (Kokoro local ou WAVs reaproveitados;
durações medidas com ffprobe → timing é fonte única).generated_still): gerar imagens no flux2-klein (playground
inemaimg, dirigido por agent-browser) → assets/broll/.build-index.mjs (data-driven): cada beat = archetype + recipes de motion
hyperframes lint (0) + inspect (0) → render draft (QC com frames) → high
(renders/<nome>-16x9.mp4 / -9x16.mp4).Clipes generativos (Sora/Veo/Kling) são fase 2 opcional, dirigidos pelo MDD.
Caso de referência: ~/projetos/hormozi13-viral-9x16/ — "12 lições do Hormozi" em 9:16
premium (12 diagramas animados, grão/grade, Anton) e 16:9 com b-roll flux2-klein (hook
= silhueta, CTA = bokeh, push-in + grade). Prova de fogo do pipeline híbrido.
video_plan_editor/
├── models.py # schema EditPlan (pydantic) + enums
├── presets.py # PresetProfile, registry PRESETS, style_for()
├── detect.py # classify_input() -> SourceKind
├── validate.py # Issue, validate_plan(), is_valid() (guardrails preflight)
├── resumo.py # render_resumo() plano -> markdown
├── builder.py # scaffold_plan() detect + preset -> EditPlan
└── cli.py # vpe scaffold | validate | resumo
A camada de guardrails/validação é inspirada no fork
inematds/mcp-video (Apache-2.0, de
KyaniteLabs/mcp-video), que envolve FFmpeg + HyperFrames.
. .venv/bin/activate
pytest -v # 35 testes
vpe scaffold "teste" --preset acao
role (hook→Intro/Title, point→Text/Charts, broll→Image/Cinematic, cta→End
Card) + export OTIO .otio p/ NLEs. ⏳docs/superpowers/specs/2026-06-06-video-plan-editor-design.mddocs/superpowers/plans/2026-06-06-video-plan-editor-core.mdPESQUISA-E-DESIGN.mdA definir.