Communitygithub.com

phido0410/rive

Animações interativas Rive (.riv) na web — runtimes @rive-app/webgl2 / canvas, hooks React (useRive, hooks de binding de dados), máquinas de estado, binding de dados (view models) e @remotion/rive para vídeo. Use quando o usuário tiver um arquivo .riv ou solicitar Rive, mascotes/ícones interativos ou animação orientada por máquina de estado.

O que é rive?

Este skill capacita agentes de IA a trabalhar com animações interativas Rive (.riv). Ele fornece orientação para integrar arquivos .riv — criados no editor Rive (rive.app) — em aplicações web usando os runtimes oficiais: @rive-app/webgl2 (recomendado para vanilla JS), @rive-app/canvas (ou canvas-lite) e os pacotes React (@rive-app/react-webgl2, @rive-app/react-canvas). Para produção de vídeo, suporta @remotion/rive. O skill explica como configurar o runtime vanilla com o construtor Rive, incluindo a reprodução de máquinas de estado e o redimensionamento da superfície de desenho. Ele também demonstra o uso moderno de view models para binding de dados (números, strings, booleanos, cores, enums, triggers) substituindo a API de inputs de máquina de estado, que está obsoleta. No React, oferece hooks como useRive, useViewModel e useViewModelInstanceNumber para manipulação declarativa de animações. Além disso, adverte que o componente Remotion para Rive não suporta lógica interativa em renderização de vídeo, recomendando animações baseadas em timeline. O skill é útil para qualquer agente que precise implementar avatares animados, ícones interativos ou animações complexas controladas por estado, integrando-se perfeitamente aos ecossistemas web e de produção de vídeo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/phido0410/claude-video-skills/tree/HEAD/skills/rive

Perguntar na sua IA favorita

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

Documentação

O que rive faz?

Verificado em 2026-10: @rive-app/canvas 2.45, @rive-app/react-canvas 4.37, @remotion/rive 4.0.

Arquivos .riv são criados no editor Rive (rive.app). O código pode reproduzi-los e controlá-los, mas não pode criá-los. Peça ao usuário o arquivo ou use um arquivo da comunidade no marketplace da Rive.

Pacotes

NecessidadePacote
Vanilla JS, recomendado@rive-app/webgl2
Vanilla JS, Canvas2D@rive-app/canvas (@rive-app/canvas-lite se não precisar de Texto, Layouts, Scripts, Áudio)
React@rive-app/react-webgl2 ou @rive-app/react-canvas
Remotion@remotion/rive

Vanilla

import { Rive } from '@rive-app/webgl2'

const r = new Rive({
  src: '/hero.riv',
  canvas: document.getElementById('canvas'),
  stateMachines: 'State Machine 1',  // nome do editor
  autoplay: true,
  autoBind: true,                     // vincula a instância de view model padrão
  onLoad: () => r.resizeDrawingSurfaceToCanvas(),
})
window.addEventListener('resize', () => r.resizeDrawingSurfaceToCanvas())
// posteriormente: r.cleanup()

Data binding (forma atual de controlar um .riv)

Os inputs da máquina de estado (r.stateMachineInputs(name), .value, .fire()) estão obsoletos nos tipos do runtime. Use-os apenas para arquivos antigos sem view models.

const vmi = r.viewModelInstance          // requer autoBind: true
vmi.number('Progress').value = 0.75
vmi.string('Title').value = 'Olá'
vmi.boolean('Active').value = true
vmi.color('Accent').value = 0xFFFF5500    // ARGB
vmi.enum('Mood').value = 'Feliz'
vmi.trigger('Jump').trigger()
vmi.number('Progress').on((e) => console.log(e.data))

React

import { useRive, useViewModel, useViewModelInstance,
  useViewModelInstanceNumber, useViewModelInstanceTrigger } from '@rive-app/react-canvas'

const { rive, RiveComponent } = useRive({ src: '/hero.riv', stateMachines: 'State Machine 1', autoplay: true })
const vm = useViewModel(rive)
const vmi = useViewModelInstance(vm, { useDefault: true, rive })
const { setValue: setProgress } = useViewModelInstanceNumber('Progress', vmi)
const { trigger: jump } = useViewModelInstanceTrigger('Jump', vmi)

return <RiveComponent style={{ width: 400, height: 400 }} onClick={jump} />

O contêiner precisa de um tamanho explícito; RiveComponent preenche o elemento pai.

Para vídeo

No Remotion, use <RemotionRiveCanvas src="..." /> do @remotion/rive — ele reproduz o arquivo em sincronia com o frame atual (consulte a documentação do remotion para suas props). A lógica interativa de máquina de estado que espera cliques/passagem do mouse não será executada em uma renderização; projete o .riv com uma animação baseada em timeline para uso em vídeo.

Individual skills in this repo

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

Habilidades Relacionadas