O formato funscript, campo por campo
O formato funscript é um objeto JSON com uma chave essencial, actions: uma lista de pares {"at", "pos"} que dá uma posição de 0 a 100 num momento em milissegundos. Em volta dela ficam version, inverted, range e metadata. Esta página define cada campo, as convenções que os arquivos seguem e exatamente o que o AutoScript Sync faz ao ler e escrever um.
Conferido com o código do app em 21 de setembro de 2026. Descreve as convenções comuns, não uma especificação formal.
A estrutura
Um funscript é um único objeto JSON salvo como texto UTF-8 com a extensão .funscript. Um arquivo pequeno completo, no formato em que o AutoScript Sync salva:
{
"version": "1.0",
"inverted": false,
"range": 100,
"metadata": {
"creator": "AutoScript Sync",
"format": "funscript"
},
"actions": [
{"at": 0, "pos": 50},
{"at": 350, "pos": 95},
{"at": 720, "pos": 5},
{"at": 1080, "pos": 95},
{"at": 1500, "pos": 5},
{"at": 5500, "pos": 5}
]
}
Os dois últimos pontos mantêm a mesma posição por quatro segundos: uma pausa é escrita como dois pontos com o mesmo pos, não como uma lacuna. A ordem das chaves não importa em JSON, e os espaços em branco são livres.
Os campos
actions- Uma matriz de pontos, cada um um objeto com
atepos. É o único campo de que um player precisa. Um arquivo sem ele não é um script utilizável. at- O momento do ponto em milissegundos a partir do início do vídeo, como número inteiro.
1500é um segundo e meio de vídeo. pos- A posição em que estar naquele momento, como número inteiro de 0 a 100. O que 0 e 100 significam fisicamente depende do dispositivo e das configurações dele; o arquivo só diz "até este ponto da faixa".
version- A versão do formato como string, geralmente
"1.0". invertedtrueoufalse. Quando for true, as posições devem ser lidas de cabeça para baixo, como100 − pos.range- Um número, geralmente
100, que descreve a amplitude depos. A maioria dos arquivos o deixa em 100. metadata- Um objeto para qualquer coisa sobre o script: o programa que o criou, um título, notas, tags. Os players não precisam dele para reproduzir o arquivo.
Arquivos de editores costumam trazer chaves extras no nível superior, como capítulos ou marcadores. Elas são permitidas; um leitor que não as entenda deve ignorá-las e, idealmente, mantê-las.
Convenções que um arquivo bem formado segue
até um número inteiro de milissegundos, contado a partir do início do vídeo, nunca negativo.posé um número inteiro de 0 a 100.- As ações são ordenadas por
at, da mais cedo para a mais tarde. - Nenhuma ação compartilha o mesmo
atcom outra. - Os números são números JSON, não strings:
"at": 400, e não"at": "400".
Os programas variam na tolerância quando um arquivo quebra essas regras. O app para desktop conserta o que consegue, como descrito abaixo. Nossa própria ferramenta de navegador, o Report Studio, não conserta: ela assume que as ações já estão ordenadas, pega a duração da última ação, ignora inverted e range, e rejeita um arquivo cujos valores de at sejam strings. Um arquivo que segue as cinco convenções evita essas diferenças.
Como o AutoScript Sync lê um arquivo
Quando você abre um script com Load Funscript…, solta o arquivo na janela ou abre um vídeo com um script de mesmo nome ao lado, o app conserta as ações em vez de recusar o arquivo:
- ordena as ações por tempo;
- funde ações que compartilham o mesmo tempo, mantendo a última;
- limita
posa 0–100 e tempos negativos a 0; - pula entradas que não consegue ler, sem dizer quantas;
- lê
range, mas nunca o usa para reescalar, então um arquivo com range diferente de 100 ainda é tratado como 0–100; - mantém
versioncomo encontrado ("1.0"se estiver ausente).
A próxima atualização (2.121.2, já compilada, mas ainda não lançada) faz o leitor aceitar mais arquivos e preservar mais do que há neles:
- arquivos salvos com byte-order mark, ou em UTF-16, são carregados em vez de recusados;
inverted: trueé aplicado uma vez ao carregar (100 − pos), com um aviso para você, e o arquivo é salvo de volta cominverted: false, para que todos os outros players vejam o mesmo movimento. O app lançado ignora a flag, então um arquivo invertido toca de cabeça para baixo;- valores fracionários de
atepossão arredondados para o inteiro mais próximo, e valores NaN ou infinitos são pulados; - chaves de nível superior desconhecidas, como capítulos ou marcadores, são mantidas e gravadas de volta quando você salva; o app lançado as descarta ao salvar;
- um arquivo que não é texto, não é JSON, não é um objeto ou não tem lista
actionsrecebe uma mensagem em linguagem simples, e um script sem ações utilizáveis não é associado ao vídeo.
Como o AutoScript Sync grava um arquivo
Todo script que o app salva, gerado ou editado, segue as convenções acima, não importa o que tenha acontecido no editor:
- Ações são gravadas em ordem crescente de tempo, com tempos únicos,
atcomo número inteiro não negativo de milissegundos eposcomo número inteiro de 0 a 100. Se dois pontos arredondarem para o mesmo milissegundo, prevalece o mais tardio. - Cabeçalho:
version,invertederangesão gravados como estão; um script gerado recebe"1.0",falsee100. - Metadados:
creatoré sempre definido como"AutoScript Sync"eformatcomo"funscript". Salvar por cima do script de outra ferramenta substitui o criador dele. - Detalhes da análise nos scripts gerados: gerador, resumo do reconhecimento, tempos, caminho de rastreamento e um bloco
aicom o rótulo de tipo de cena de cada janela de dois segundos, a região rastreada, quanto foi preenchido em vez de medido e as pontuações da eleição de âncora. - Salvamento seguro: o JSON é gravado, indentado, num arquivo temporário e depois trocado pelo original, para que uma falha no meio do salvamento não corrompa o script existente.
- Backup: quando o Generate salva ao lado do vídeo, qualquer script existente é primeiro copiado para
<name>.funscript.bak. Só um backup é mantido; o próximo Generate o sobrescreve.
O arquivo no disco nunca é ajustado a um dispositivo. Quando o app envia um script ao Autoblow AI Ultra, ele ajusta uma cópia aos limites do dispositivo e remove os metadados de análise, mantendo apenas o movimento e alguns campos do cabeçalho (generator, creator, format, version, range, stroke_expansion e um id, se houver).
Erros comuns e como encontrá-los
O validador de funscript verifica cada um deles no seu navegador, sem enviar o arquivo, e lista os problemas que encontra.
- JSON inválido
- Uma vírgula ou colchete faltando, ou uma vírgula sobrando depois da última ação. Nada consegue ler o arquivo até que seja corrigido.
- Ações ausentes ou malformadas
- Sem a chave
actions, ou entradas semateposnuméricos. - Tempos fora de ordem
- Geralmente por juntar dois scripts ou editar à mão. Programas que assumem ações ordenadas mostram uma duração errada ou dão saltos na reprodução.
- Tempos repetidos
- Dois pontos no mesmo
atcom posições diferentes: um player não pode estar em dois lugares ao mesmo tempo. - Posições fora de 0–100
- Um
posabaixo de 0 ou acima de 100 aponta para fora da faixa que o player mapeia no dispositivo. - Movimentos rápidos demais para o dispositivo
- Não é um erro de formato, mas um salto grande em pouco tempo exige mais do que um dispositivo consegue fazer. O validador sinaliza trechos acima de um limite de velocidade que você define, 400 unidades por segundo por padrão.
Quando o arquivo é JSON válido com uma lista actions, o validador oferece uma cópia consertada: ordenada por tempo, tempos duplicados fundidos, posições limitadas a 0–100 e valores arredondados, com todo o resto do arquivo mantido. Ele não consegue consertar JSON quebrado nem uma lista actions ausente, e não desacelera movimentos rápidos demais.
Perguntas
Existe uma especificação oficial de funscript?
Esta página descreve as convenções que os arquivos em circulação seguem e o que o AutoScript Sync lê e grava. Não é um padrão formal, e não descrevemos como outros players lidam com casos extremos.
Quantos pontos por segundo um script deve ter?
O formato não define uma taxa. Os pontos ficam onde o movimento muda de direção. Os scripts gerados pelo AutoScript Sync colocam um ponto em cada inversão do movimento medido, então uma cena lenta tem poucos e uma rápida tem muitos.
Por que meu script diz "creator": "AutoScript Sync" se outra pessoa o fez?
O app carimba o próprio nome como criador em cada salvamento, inclusive ao salvar por cima do script de outra ferramenta. Coloque o nome do autor original de volta nos metadados, ou na sua publicação, quando for compartilhá-lo.
O AutoScript Sync mantém capítulos e outras chaves extras?
Na próxima atualização (2.121.2), sim: chaves de nível superior desconhecidas são mantidas e gravadas de volta. A versão lançada 2.121.1 as descarta ao salvar, então guarde uma cópia do original.
Leia a seguir
- Verifique um arquivo com o validadorEncontra no seu navegador os erros descritos nesta página e oferece uma cópia consertada.
- Uma introdução em linguagem simplesO que é um funscript e como um dispositivo o usa, sem o detalhamento dos campos.
- Como criar um script, à mão ou geradoO fluxo do vídeo até um arquivo salvo e verificado.
- A central de aprendizadoAs quatro páginas de referência.
Gere scripts bem formados a partir dos seus vídeos
O AutoScript Sync grava funscripts padrão ao lado dos seus vídeos; o teste é o app completo por um dia.