Nodos, animaciones y temporizadores
Conecta API Message, Hotkey y Play Animation como en tu captura, sin Pose Studio.
1. Reproduce el grafo de tu captura sin Pose Studio

- En VNyan entra a Node Graphs y pulsa Add new graph.
- Nombra el grafo
LunaRegalo. - Agrega API Message en los nodos de callback y escribe
LunaRegaloen Action. - Añade un nodo Hotkey; usa Set hotkey para probarlo a mano con una tecla disponible.
- Añade Play Animation; elige una animación incluida entre las disponibles en VNyan y ajusta las mezclas de movimiento.
- Conecta las salidas de API Message y Hotkey tanto a Play Animation como a Start Timer, como en la captura.
- En Start Timer usa un nombre idéntico al del nodo Timer, por ejemplo
FinSaludo, y un valor de8000milisegundos. - Añade el nodo Timer con nombre
FinSaludoy conecta su salida a Stop Animation. - Activa la casilla Active, guarda el grafo, y prueba la tecla rápida y después el mensaje API.
2. Código real que envía el evento desde Node
Tu archivo src/avatar.mjs toma config.avatar.actions[kind] y envía el objeto {action,payload} a la URL de VNyan. Esto explica por qué el valor LunaRegalo tiene que coincidir exactamente con el del callback.
const action = config.avatar.actions[kind];
await fetch(config.avatar.apiUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ action, payload: {} })
});Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:8069/" -ContentType "application/json" -Body '{"action":"LunaRegalo","payload":{}}'3. Replica grafos para regalos, seguidores y suscripciones
| Grafo | Action del callback | Animación sugerida | Comprobación |
|---|---|---|---|
| LunaRegalo | LunaRegalo | Celebración suave | Regalo → movimiento corto → fin. |
| LunaSeguidor | LunaSeguidor | Saludo con mano | Seguir → gesto visible. |
| LunaSuscripcion | LunaSuscripcion | Agradecimiento | Suscribir → gesto visible. |
| LunaComparte | LunaComparte | Movimiento discreto | Compartir → gesto visible. |
| LunaSaluda | LunaSaluda | Saludo de bienvenida | Prueba con hotkey. |
Usa la misma estructura API Message → Play Animation → Timer → Stop Animation. Cambia el nombre de Action y selecciona el movimiento que exista en tu instalación. Puedes usar una tecla distinta para cada grafo si deseas probar sin depender de TikFinity.
4. Gestos idle opcionales (no son poses importadas)
En tu config.json están configurados cuatro nombres de movimientos de espera y un intervalo de 30 segundos. El programa intenta iniciar uno cuando hay suficiente silencio. Sin un grafo activo para cada nombre, la solicitud no moverá el avatar.
"idleEveryMs": 30000,
"idleQuietMs": 12000,
"idleActions": [
"idleLookLeft",
"idleLookRight",
"idlePosture",
"idleHands"
]- Crea grafos
LunaIdleIzquierda,LunaIdleDerecha,LunaIdlePosturayLunaIdleManossi realmente los quieres usar. - En cada uno configura una acción predeterminada ligera, no una postura extrema.
- Prueba con
.\scripts\probar_movimientos.ps1. - Si prefieres solo movimientos naturales propios de VNyan, desactiva las acciones idle del puente o elimina sus entradas activas sin deshabilitar otros gestos que sí uses.
5. Errores habituales de conexión
- La hotkey funciona y el API no: confirma Action exacto, API REST activa, puerto 8069 y permiso del cortafuegos local.
- El API responde y no hay movimiento: confirma cables,
Active, selección de animación y controles de blend. - La animación no termina: revisa que el nombre de Start Timer sea idéntico al de Timer.
- Se superponen dos gestos: evita disparos simultáneos y acorta duraciones o reduce amplitud.
- La boca no se mueve: los gestos no equivalen a lipsync; revisa el capítulo 07.