Como funciona a geração de funscript com IA

O AutoScript Sync lê o movimento de um vídeo com rastreamento de movimento por IA que roda inteiramente no seu PC: ele amostra quadros, mede o movimento com fluxo óptico, adiciona modelos opcionais de pose e profundidade, funde esses sinais num único traçado de posição e coloca um ponto do script em cada mudança de direção. O resultado é um .funscript padrão salvo ao lado do vídeo. O ajuste a um dispositivo específico acontece depois, apenas na cópia enviada a esse dispositivo.

Conferido com o código do app em 21 de setembro de 2026. Descreve o app lançado, 2.121.1, salvo quando uma linha diz o contrário.

O pipeline, do arquivo de vídeo ao dispositivo

AutoScript Sync analysis pipeline Decode, sample every Nth frame at 320 pixels, find the moving region, measure it with DIS optical flow plus optional pose and depth and background motion-vector and audio passes, fuse in a Kalman smoother, label 2-second motion-type windows, place points at reversals, save the funscript, then fit a copy to the device. Decode the video (hardware decoding first, software fallback) Sample every 4th / 3rd / 2nd frame (Fast / Balanced / High), shrink to 320 px Find the moving region (motion heatmap, or the box you draw) DIS optical flow YOLOv8-pose MiDaS depth Motion vectors Fuse into one position trace (Kalman/RTS smoother) Label 2-second windows by motion type Points at direction changes → .funscript saved beside the video Fit a copy to the connected device (speed, spacing, point density) always on optional optional + audio envelope, background passes
O arquivo salvo termina na última seta contínua. A etapa tracejada se aplica apenas à cópia que o app envia a um dispositivo; o arquivo no disco nunca é ajustado a um dispositivo.

Cada etapa em um parágrafo

Decodificação e amostragem

O vídeo é decodificado pelo backend FFmpeg do OpenCV. O app pede primeiro a decodificação por hardware e recorre à decodificação por software se o codec, a build ou o driver não conseguirem fazê-la. Uma thread de trabalho decodifica adiantado num buffer de até 64 quadros, para que a decodificação e a inferência de IA se sobreponham em vez de se revezarem.

A configuração Accuracy decide quantos quadros são analisados: Fast pega a cada 4º quadro, Balanced (o padrão) a cada 3º e High a cada 2º. Em vídeo de 30 fps, isso dá 7,5, 10 ou 15 amostras por segundo; em vídeo de 60 fps, as taxas dobram. Cada quadro amostrado é reduzido para 320 px de largura antes de qualquer análise, seja qual for a resolução original. Vídeos de RV são primeiro desentortados para uma vista em perspectiva normal de um olho.

Encontrar a região em movimento

A menos que você mesmo desenhe uma caixa com Set Motion Region… ou Live Track, o motor monta um mapa de calor do movimento, pega a área conectada mais quente e a amplia em 15%. O fluxo óptico e a profundidade são medidos dentro dessa região.

Medir o movimento

O fluxo óptico é o único sinal que sempre roda: o fluxo denso DIS mede como a região se move entre os quadros amostrados. A estimativa de pose com YOLOv8 adiciona 17 pontos-chave do corpo por pessoa, e a estimativa de profundidade com MiDaS adiciona o eixo de aproximação e afastamento da câmera que o vídeo plano esconde. Os dois modelos são opcionais; sem eles, o motor roda só com o fluxo e avisa isso. Numa thread em segundo plano, o app também lê os vetores de movimento do próprio codec e um envelope de volume do áudio a 50 Hz, dentro de um limite de tempo que cresce com a duração do filme.

Fusão

O fluxo dá a velocidade, que se desvia quando é somada ao longo do tempo. Por isso o motor elege uma âncora por vídeo a partir do centro da região, da pose e da profundidade, e um suavizador Kalman/RTS funde o fluxo integrado com essa âncora num único traçado de posição. Por padrão, a âncora é uma mistura, amostra a amostra, de todos os canais legíveis, mantida apenas quando pontua pelo menos tão bem quanto o canal único eleito. Onde o rastreamento falha, a lacuna é preenchida com movimento rítmico continuado a partir dos cursos ao redor, e a parcela que foi preenchida em vez de medida é gravada nos metadados do script.

Janelas por tipo de movimento

A linha do tempo é cortada em janelas de 2 segundos. Um pequeno classificador rotula cada uma por tipo de movimento a partir de seis características de movimento, e uma passada de suavização impede que os rótulos fiquem alternando entre janelas. O rótulo decide como o movimento daquela janela é moldado. Um rótulo que você mesmo define e que cobre pelo menos metade de uma janela prevalece sobre o classificador nessa janela.

Os pontos e o arquivo salvo

Um ponto do script é colocado em cada inversão do movimento, nunca menos de 120 ms depois do anterior e pelo menos a cada 4 segundos, e a lista de pontos é então simplificada. O app grava um JSON .funscript padrão ao lado do vídeo, com o mesmo nome, depois de copiar qualquer script existente para .funscript.bak. Veja o formato funscript para saber o que há dentro.

Ajuste ao dispositivo

A cópia enviada a um dispositivo, nunca o arquivo salvo, é ajustada a esse dispositivo: pontos mais próximos do que ele consegue resolver são fundidos, trechos mais rápidos que seu limite de velocidade perdem amplitude, mas mantêm o tempo, e a densidade de pontos é limitada. Para o Autoblow AI Ultra, as inversões também são colocadas numa grade de 16 fps. No app lançado, esse ajuste vale para o envio ao Autoblow; aplicá-lo também aos dispositivos do Intiface vem na próxima atualização. Como o dispositivo depois se mantém no tempo do vídeo é explicado em correção de desvio e tempo de sincronização.

Onde cada parte roda

Toda a análise acontece no seu PC. Os módulos de análise não têm nenhum código de rede e o vídeo nunca é enviado. A configuração Hardware oferece Auto (o padrão), GPU (CUDA) e CPU.

Qual processador cada etapa usa
EtapaRoda em
Decodificação de vídeoO decodificador por hardware de qualquer fabricante, quando disponível; caso contrário, a CPU
Modelos de pose e profundidadeGPU NVIDIA via CUDA (ONNX Runtime ou PyTorch); CPU quando nenhuma GPU CUDA pode ser usada
Fluxo ópticoCPU (OpenCV), em todas as máquinas

Não há aceleração AMD ou Intel para os modelos de IA, e o TensorRT não é usado. Se uma GPU CUDA for pedida mas não puder ser usada, a pose e a profundidade recorrem à CPU e o app informa o provedor realmente em uso; o botão Check GPU diz qual é. O caminho pela CPU funciona, mas é bem mais lento: um comentário no código, do PC de teste com RTX 5080, registra o modelo de profundidade pequeno a cerca de 25,8 ms por chamada na GPU contra 234 ms na CPU.

Não medimos a velocidade com um filme inteiro em nenhuma GPU além da do próprio desenvolvedor, nem num PC só com CPU, então esta página não faz nenhuma promessa de velocidade. A página de benchmarks mostra o que foi medido, em quê, e o que não foi.

O que ainda não resolvemos

Estes resultados vêm da avaliação do próprio desenvolvedor com 28 clipes curtos que ele roteirizou à mão, tirados de cinco filmes nos quais os padrões foram ajustados, usando a build posterior à 2.121.1 (compilada, ainda não lançada). É um único roteirista e uma amostra pequena, então leia-os como fraquezas conhecidas, não como um benchmark.

  • Mudanças de direção perdidas. O motor fez 1,80 mudanças de direção por segundo onde o humano fez 2,29, cerca de 21% a menos. Como algumas das viradas do motor também eram extras ou fora de tempo, só mais ou menos metade das viradas do humano foram acertadas dentro de 150 ms. A concordância nas viradas de curso variou de 0,33 a 0,71 (F1, dentro de 150 ms) conforme o filme.
  • Cursos rápidos saem pequenos. Nos dois filmes com os cursos mais rápidos, os cursos do motor tiveram um quarto e metade do tamanho dos do humano. A explicação provisória é que as 10 amostras por segundo do Balanced (em vídeo de 30 fps) suavizam o movimento rápido até ele sumir.
  • Ele não para quando a ação para. Em trechos que o humano marcou como sem ação, o motor ainda produziu cerca de 85 mudanças de direção por minuto. Ele se recusa, sim, a fazer qualquer script quando menos de 5% das amostras mostram movimento real.
  • Os rótulos de tipo de movimento não estão comprovados. Com validação separada por vídeo nos rótulos do próprio desenvolvedor, o classificador de movimento sozinho pontuou abaixo de um chute constante, e nenhum número de precisão do app padrão está em condições de ser publicado. Os rótulos que você mesmo define prevalecem sobre ele.

O editor de linha do tempo, o Re-analyze na taxa de quadros completa sobre um trecho selecionado e a solução de problemas de funscript são as respostas práticas hoje.

Leia a seguir

Experimente nos seus próprios vídeos

O teste dura um dia e roda no seu próprio PC; seus vídeos são analisados localmente e nunca são enviados.