kimo
Editor de video sin interfaz gráfica que los agentes de IA controlan mediante MCP. Cortar, fotogramas clave, corrección de color, pistas, claves, subtítulos, mezcla de audio y exportación, todo a través de llamadas a herramientas. Un único binario de Rust solo con CPU, con licencia MIT.
Documentación
kimo
Un editor de video que una IA puede manejar.
Primero MCP. Cada función es una llamada a herramienta. Escrito en Rust, funciona en una máquina de 2 GB.
getkimo.tech
Qué es
v1.0.0. 255 herramientas, probadas con fuzzing (9359 llamadas, 0 fallos). main es la v1 estable; el trabajo nuevo llega en ramas de características.
kimo es un editor de video sin interfaz gráfica. Te comunicas con él a través del Protocolo de Contexto de Modelo. Cortar, animar con fotogramas clave, etalonar, rastrear, hacer keying, reiluminar, simular, subtitular, mezclar y exportar son todos comandos registrados, y la lista de herramientas del servidor MCP se genera desde ese mismo registro. No hay ninguna función a la que un humano pueda acceder que una IA no pueda.
El objetivo es la superficie de CapCut, After Effects, Premiere y DaVinci Resolve en un solo motor: edición, gráficos animados, efectos visuales, rastreo y color profesional. Es un motor temprano con niveles honestos. Lee FEATURES.md para ver qué es sólido, qué está en beta y qué no está construido.
- Primero MCP. Agrega una herramienta al registro y automáticamente estará en el servidor MCP, en la prueba de fuzzing y en el esquema.
- CPU, poca memoria. El renderizador es solo CPU y está optimizado para una máquina de 2 GB. El código de GPU está desactivado por defecto con una alternativa en CPU.
- Medido, no afirmado. Cada línea de "mejor que X" en FEATURES.md tiene una base declarada y un número medido, incluidos los casos en los que perdimos.
- Pocos puntos de entrada.
tools/listdevuelve 16 herramientas agrupadas (15.7 KB) en lugar de 255 (176 KB), medido 11.2x más pequeño (JSON compacto, v1.0.0). Cada herramienta individual sigue siendo invocable por su propio nombre. - Probado con fuzzing. 255 herramientas, 9359 llamadas, 0 fallos, antes de publicar cualquier cosa.
Instalación
Descarga un binario (Linux x86_64, estático, sin dependencias excepto ffmpeg):
Windows x64 también incluye un instalador de configuración por usuario y un ZIP portátil, con el mismo servidor MCP y las fuentes incluidas. Descarga los recursos de Windows desde GitHub Releases, o desde los artefactos de una ejecución manual del flujo de trabajo release. Consulta la guía de configuración de Windows para la instalación de FFmpeg y la configuración de MCP. Para compilar localmente, ejecuta powershell -ExecutionPolicy Bypass -File packaging/windows/build.ps1 con Rust, Python 3 e Inno Setup 6 instalados.
curl -LO https://github.com/naman-sharma12345/kimo/releases/download/v1.0.0/kimo-v1.0.0-linux-x86_64.tar.gz
tar xzf kimo-v1.0.0-linux-x86_64.tar.gz
./kimo-v1.0.0-linux-x86_64/kimo-mcp # speaks MCP over stdin/stdout
El binario pesa unos 10 MB y responde a su primera solicitud MCP en unos 2 ms (medido: initialize 2 ms, primera tools/list 6 ms). Está enlazado estáticamente (musl), por lo que se ejecuta en cualquier Linux x86_64. Necesita ffmpeg y ffprobe en el PATH para decodificar y codificar.
Windows x64: descarga el instalador (kimo-1.0.0-windows-x86_64-setup.exe) o el ZIP portátil desde la versión de Windows. El instalador no está firmado, por lo que Windows puede mostrar una advertencia de SmartScreen; verifica el archivo .sha256 junto a él. Consulta la guía de configuración de Windows.
Los binarios de macOS aún no se publican; compila desde el código fuente allí (abajo).
Compilar desde el código fuente (Rust estable):
cargo build --release # target/release/kimo-mcp
python3 examples/demo_grade.py # graded 2-clip sequence with a transition, built only with MCP calls
python3 examples/effects_gallery.py # renders every effect
Configuración: agrega kimo a tu cliente de IA
kimo es un servidor MCP local que se comunica a través de stdin/stdout (el transporte "stdio"). No hay nada que iniciar manualmente: tu cliente lanza kimo-mcp por sí mismo. Solo necesitas la ruta al binario.
1. Obtén el binario (consulta Instalación arriba) y colócalo en un lugar estable, por ejemplo:
mkdir -p ~/.local/bin && cp kimo-v1.0.0-linux-x86_64/kimo-mcp ~/.local/bin/
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | ~/.local/bin/kimo-mcp
El segundo comando debería imprimir una respuesta JSON que contenga "serverInfo":{"name":"kimo". Instala también ffmpeg y ffprobe (sudo apt install ffmpeg, o tu gestor de paquetes).
2. Agrégalo a tu cliente. Reemplaza /home/you/.local/bin/kimo-mcp con tu ruta absoluta. Los formatos de configuración a continuación se verificaron contra la documentación pública de cada cliente el 2026-10-11; las configuraciones de los clientes cambian, así que si una falla, consulta la página enlazada.
Claude Code
claude mcp add --transport stdio kimo -- /home/you/.local/bin/kimo-mcp
Agrega --scope user para que esté disponible en todos los proyectos, o --scope project para escribirlo en un .mcp.json compartido. Verifica con claude mcp list, o escribe /mcp dentro de Claude Code. Lo mismo como archivo .mcp.json en tu proyecto:
{ "mcpServers": { "kimo": { "command": "/home/you/.local/bin/kimo-mcp", "args": [] } } }
OpenAI Codex (CLI y extensión de IDE)
codex mcp add kimo -- /home/you/.local/bin/kimo-mcp
O edita ~/.codex/config.toml (o .codex/config.toml en un proyecto de confianza):
[mcp_servers.kimo]
command = "/home/you/.local/bin/kimo-mcp"
Cursor
Crea ~/.cursor/mcp.json (todos los proyectos) o .cursor/mcp.json (un proyecto):
{ "mcpServers": { "kimo": { "command": "/home/you/.local/bin/kimo-mcp", "args": [] } } }
Luego abre la configuración de MCP de Cursor y activa el servidor kimo.
OpenCode
Coloca esto en opencode.json en tu proyecto, o en ~/.config/opencode/opencode.json para todos los proyectos. Ten en cuenta que OpenCode toma command como una lista y usa type: "local":
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kimo": { "type": "local", "command": ["/home/you/.local/bin/kimo-mcp"], "enabled": true }
}
}
Cualquier otro cliente MCP
kimo es un servidor MCP stdio estándar (protocolo 2024-11-05, initialize, tools/list, tools/call). Cualquier cliente que pueda registrar un servidor stdio por comando funciona: dale la ruta absoluta a kimo-mcp y sin argumentos. Muchos clientes usan la forma JSON mcpServers que se muestra para Cursor; algunos (por ejemplo Zed) usan una clave diferente, así que consulta la documentación de MCP de tu cliente para el archivo y formato exactos. Solo los cuatro clientes anteriores se verificaron contra su documentación.
Windows: usa la ruta a kimo-mcp.exe (el instalador lo coloca en %LOCALAPPDATA%\\Programs\\kimo\\bin; en JSON escribe las barras invertidas duplicadas, consulta la guía de Windows). Las configuraciones anteriores son las mismas excepto por la ruta; los formatos de Claude Code, Codex, Cursor y OpenCode se verificaron en su documentación, no se probaron en Windows aquí. macOS: compila desde el código fuente (abajo) y usa la ruta a target/release/kimo-mcp.
3. Pruébalo. Pídele a tu asistente: "Usa kimo para importar /ruta/al/clip.mp4, agrega un título y renderiza un fotograma." O manéjalo tú mismo con el cliente de Python en examples/mcp_client.py.
Lista de herramientas agrupada o plana
Por defecto, el servidor lista 16 herramientas agrupadas (unos 15.7 KB) para no inundar las ventanas de contexto pequeñas; llama a un grupo con action y args, o usa kimo_search para encontrar una herramienta por intención y kimo_describe para ver sus argumentos. Cada una de las 255 herramientas aún se puede invocar por su propio nombre. Para listar las 255 individualmente, establece KIMO_TOOLS=flat en el entorno del servidor:
claude mcp add --transport stdio --env KIMO_TOOLS=flat kimo -- /home/you/.local/bin/kimo-mcp
[mcp_servers.kimo.env]
KIMO_TOOLS = "flat"
Para configuraciones JSON, agrega "env": { "KIMO_TOOLS": "flat" } a la entrada del servidor (OpenCode: "environment": { "KIMO_TOOLS": "flat" }).
Solución de problemas
- El servidor aparece como fallido: ejecuta la línea
initializeanterior manualmente; si funciona, la ruta en tu configuración es incorrecta (usa una ruta absoluta). - Las herramientas que leen o escriben video fallan:
ffmpegyffprobeno están en el PATH con el que tu cliente se inicia. - Una exportación larga agota el tiempo de espera en tu cliente: aumenta el tiempo de espera de la herramienta MCP del cliente;
KIMO_TIMEOUT_Sestablece el límite del lado del servidor por llamada de herramienta.
Trabajo hecho con kimo
Estos son renders del motor, impulsados por llamadas a herramientas. Algunos provienen de la película que estamos construyendo con él. Cuando algo aún es tosco, se dice.
Vidrio fracturado
Fragmentos de vidrio con movimiento físico, refracción, desenfoque de movimiento con corrección de obturador y un núcleo amortiguado para que la rotura comience desde el punto de impacto. Se muestra sobre una placa de ciudad, fila superior antes de la amortiguación del núcleo, fila inferior después. El agujero oscuro donde se rompe el vidrio ahora se puede rellenar con hole_fill (desactivado por defecto): una copia desenfocada y atenuada del panel (profundidad detrás del vidrio), o con hole_source=1 las capas inferiores. El relleno es un desenfoque, no una escena reconstruida, por lo que se lee solo como profundidad fuera de foco.

Izquierda, agujero por defecto. Derecha, hole_fill=1 (mismo fotograma, placa de ciudad 1280x720, t=1.0 s):

Vidrio esmerilado (efecto de fondo)
frosted_glass convierte el alfa de cualquier capa en un panel de vidrio: en su interior muestra la composición inferior, desenfocada, teñida y refractada en un bisel, con una luz de borde. Se ejecuta después de la posición y escala propias de la capa, por lo que un panel deslizante esmerila lo que realmente está debajo. Fotograma de un clip de 5 s a 1280x720 (la exportación tomó 15.0 s en la máquina de 2 GB); el título se asienta sobre el panel. magnify convierte el panel en una lente de aumento. Límites: no para capas inclinadas en 3D; la refracción es un desplazamiento de bisel, no una lente con trazado de rayos; el esmerilado es un desenfoque de caja de 3 pasadas, no un gaussiano.

Partículas que golpean cosas
Los emisores toman colliders (círculo, rectángulo o plano, analítico y determinista) contra los que las chispas rebotan con bounce y friction, más una fuerza de remolino vortex. De izquierda a derecha: sin obstáculo, un círculo y un plano de piso, un vórtice con un piso (misma semilla). Los colisionadores también pueden ser la silueta alfa de otra capa (kind: layer, clip_id), por lo que las chispas rebotan contra un título o una forma; la silueta se lee en el fotograma actual por defecto; follow: true en el colisionador usa la silueta en el tiempo propio de cada paso (contenedores de 0.1 s), por lo que un título animado empuja las partículas delante de él. Límites: las partículas no colisionan entre sí; los rectángulos delgados pueden ser atravesados por partículas muy rápidas (60 pasos de integración por segundo).

Partículas desde una capa
Un emisor con shape: layer y emit_clip genera en la silueta alfa de ese clip (emit_edge solo para el contorno), por lo que las brasas pueden elevarse desde las letras de un título; las chispas también pueden rebotar contra él (tipo colliders layer). Se muestra: un clip de título de 5 s a 1280x720, exportación 18.8 s. Con emit_follow, cada partícula se genera en la silueta tal como estaba en su propio tiempo de nacimiento (contenedores de 0.1 s), por lo que un título en movimiento o animado deja un rastro de sus posiciones pasadas; sin él, se usa la silueta del fotograma actual. Límite: los contenedores tienen 0.1 s de ancho, por lo que una capa muy rápida avanza entre contenedores, y cada contenedor cuesta un render del clip.

Desenfoque de movimiento en partículas y en escenas 3D
Ambos toman shutter_deg y blur_samples, desactivados por defecto. La escena se muestrea en varios instantes a lo largo del obturador y se promedia en espacio premultiplicado. El desenfoque de escena 3D re-posiciona toda la escena por muestra, por lo que la animación de objetos, la jerarquía y los movimientos de cámara se desenfocan. Medido en una escena de 1280x720: 0.19 s por fotograma desactivado, 0.87 s con 8 muestras. Con 8 muestras, un movimiento muy rápido muestra copias escalonadas, así que aumenta blur_samples.

Rastreo y estabilización
Rastreadores de puntos, planos y mallas, rastreo de características con ajustes de homografía, rastreo de largas brechas y diagnósticos que informan vibración y residuos. Los fotogramas a continuación son una placa de prueba sintética (arriba: una etiqueta fijada a una superficie en movimiento, abajo: el resultado estabilizado), por lo que muestran el mecanismo, no un resultado con metraje real. Una puntuación de confianza no es un bloqueo de píxeles, y las herramientas de validación pueden mostrar que un rastreo no es confiable, no que sea verdadero. Lo decimos en cada informe.
![]()
Por qué kimo
- Hecho para una IA, no adaptado a posteriori. 255 herramientas, cada una un comando registrado con un esquema. Nada en el editor es accesible solo con el ratón.
tools/listestá agrupado en 16 entradas (15,7 KB en lugar de 176 KB, 11,2 veces más pequeño), conkimo_searchpara encontrar una herramienta por intención ykimo_describepara sus argumentos, de modo que una ventana de contexto pequeña aún pueda manejarlo todo. - Probado como debe ser un servidor. Un fuzzer llama a cada herramienta con argumentos generados antes de publicar nada: 255 herramientas, 9359 llamadas, 0 fallos. Las funciones se publican con una prueba que puede fallar, por ejemplo, el vidrio esmerilado reduce el detalle del panel de 114444 a 4473 en una placa de prueba, y un colisionador en movimiento deja un corredor de 88 píxeles detrás, mientras que uno congelado deja 163.
- Efectos físicos, no ajustes preestablecidos. Vidrio fracturado con refracción, desenfoque de movimiento corregido por obturador y un núcleo de impacto amortiguado. Vidrio esmerilado que esmerila lo que realmente está debajo de un panel en movimiento, con una lente de aumento. Partículas que chocan con círculos, planos y la silueta en movimiento de una capa, y que nacen en esa silueta.
- Seguimiento real, informado con honestidad. Seguimiento de puntos, planos, mallas y características, estabilización y resolución de cámara, con diagnósticos que indican cuándo un seguimiento no es fiable en lugar de un número de confianza que parece bueno.
- Color profesional. ACES y ACEScct, ASC CDL, OCIO, LUTs, HDR, gráficos de nodos de etalonaje, scopes y respuesta de película, en un pipeline de coma flotante con salida de 16 bits, EXR y TIFF.
- Pequeño y rápido de iniciar. Un binario estático de 10 MB que responde a su primera solicitud MCP en 2 ms, solo CPU, optimizado para una máquina de 2 GB. Una toma de 5 s a 1280x720 con una placa de video, un título deslizante, lluvia de colisionadores y brasas se exporta en unos 40 s en esa máquina.
- Honesto sobre los límites. Cada función tiene un nivel en FEATURES.md, con su línea base, su número medido y los casos en los que falló.
Qué contiene
| Área | Herramientas |
|---|---|
| Línea de tiempo y edición | project_set, import_media, add_track, add_clip, move/trim/split/delete, ripple_delete, ripple_trim, roll_edit, slip_clip, slide_clip, markers, multicam, sync_clips, undo/redo, save/load |
| Apariencia y movimiento | set_property, set_keyframe (cualquier propiedad, con easing y bezier), expressions, motion paths, motion presets, speed ramps, freeze frame, flow blur, camera shake |
| Efectos y transiciones | add_effect, add_transition, blend modes, effect masks, adjustment layers |
| Máscaras y roto | bezier masks, mask keyframes, roto propagation, track mattes, refine_matte, chroma_key |
| Texto y gráficos | add_text con animadores y rutas, captions, titles, HUD frames, counters, detection boxes, shapes y path shapes con modificadores, layer styles |
| 3D y reiluminación | add_scene3d, camera, lights, materials, relight, shard bursts, fracture glass |
| Partículas y física | add_emitter, add_particles, simulate_physics |
| Seguimiento y visión | track_point, track_planar, track_mesh, track_features, stabilize, solve_camera, undistort_clip, validation tools |
| Color | primaries, wheels, curves, HSL, LUTs, ACES y ACEScct, ASC CDL, OCIO, HDR, grade node graphs, scopes, film response, match_grade |
| Audio | fades, EQ, denoise, compressor, echo, pitch, pan, loudness, auto_duck, beat detection y binding |
| Salida | render_frame, export, export_alpha, export_gif, export_audio, export_preset, high bit depth, float EXR y TIFF |
La lista completa y actual de herramientas es lo que devuelva tools/list.
Cómo ve una IA las herramientas
El tools/list predeterminado está agrupado, por lo que un cliente no tiene que leer 255 esquemas de herramientas de antemano.
| Grupo | Qué cubre |
|---|---|
| project, timeline, animate, effects | proyecto y medios, ediciones, keyframes y movimiento, efectos y transiciones |
| masks, text, graphics, vfx3d | máscaras y roto, texto y subtítulos, formas y HUD, 3D, partículas y fractura |
| tracking, color_grade, color_science, scopes | seguimiento y resolución de cámara, etalonaje, gestión de color, medición |
| audio, output | audio, render y exportación |
| kimo_search, kimo_describe | encontrar una acción por palabras clave (también busca en los catálogos de efectos y transiciones), obtener los argumentos completos de una acción |
Llama a un grupo con {"action": "<tool name>", "args": {...}}, por ejemplo {"name": "vfx3d", "action": "add_scene3d", "args": {...}}. Llamar a una herramienta por su propio nombre (add_scene3d) sigue funcionando, y tools/list con {"mode": "flat"} (o KIMO_TOOLS=flat) lista las 255. Una nueva herramienta se coloca en un grupo mediante reglas de nombre en crates/kimo-core/src/toolgroups.rs, y una prueba unitaria falla si alguna queda sin asignar. tests/group_proof.py comprueba que cada herramienta esté exactamente en un grupo y que las llamadas agrupadas y directas den el mismo resultado.
Diseño
crates/-kimo-core(modelo, keyframes, registro de comandos, grupos de herramientas, renderizador de CPU, efectos, texto, audio, seguimiento, color) ykimo-mcp(el servidor MCP stdio)examples/- Cliente Python y demosdocs/- Notas de diseño y revisionestests/- El ejecutor de fuzzing de herramientas
Estado: temprano, renderizador de CPU. Consulta ROADMAP.md y FEATURES.md.
Contribuciones y la regla del README
El README se actualiza con cada cambio de producto. Si un cambio añade, elimina o reagrupa herramientas, o publica una nueva prueba, el mismo commit actualiza este archivo.
Licencia MIT.