Il formato funscript, campo per campo

Il formato funscript è un oggetto JSON con una chiave essenziale, actions: una lista di coppie {"at", "pos"} che indicano una posizione da 0 a 100 in un istante espresso in millisecondi. Intorno ci sono version, inverted, range e metadata. Questa pagina definisce ogni campo, le convenzioni seguite dai file ed esattamente cosa fa AutoScript Sync quando ne legge e ne scrive uno.

Verificato sul codice dell'app il 21 settembre 2026. Descrive le convenzioni comuni, non una specifica formale.

La struttura

Un funscript è un oggetto JSON salvato come testo UTF-8 con estensione .funscript. Un piccolo file completo, nella forma in cui lo salva AutoScript Sync:

{
  "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}
  ]
}

Gli ultimi due punti mantengono la stessa posizione per quattro secondi: una pausa si scrive come due punti con lo stesso pos, non come un vuoto. In JSON l'ordine delle chiavi non conta, e gli spazi sono liberi.

I campi

actions
Un array di punti, ciascuno un oggetto con at e pos. È l'unico campo di cui un player ha bisogno. Un file senza questo campo non è uno script utilizzabile.
at
Il momento del punto in millisecondi dall'inizio del video, come intero. 1500 è un secondo e mezzo dall'inizio.
pos
La posizione da raggiungere in quel momento, come intero da 0 a 100. Cosa significano fisicamente 0 e 100 dipende dal dispositivo e dalle sue impostazioni; il file dice solo "a questo punto dell'escursione".
version
La versione del formato come stringa, di solito "1.0".
inverted
true o false. Se è true, le posizioni vanno lette capovolte, come 100 − pos.
range
Un numero, di solito 100, che descrive l'ampiezza di pos. La maggior parte dei file lo lascia a 100.
metadata
Un oggetto per qualsiasi informazione sullo script: il programma che l'ha creato, un titolo, note, tag. Ai player non serve per riprodurre il file.

I file creati con gli editor contengono spesso chiavi aggiuntive di primo livello, come capitoli o segnalibri. Sono ammesse; un lettore che non le comprende dovrebbe ignorarle e, idealmente, conservarle.

Convenzioni seguite da un file ben formato

  • at è un numero intero di millisecondi, contati dall'inizio del video, mai negativo.
  • pos è un numero intero da 0 a 100.
  • Le azioni sono ordinate per at, dalla prima all'ultima.
  • Nessuna coppia di azioni condivide lo stesso at.
  • I numeri sono numeri JSON, non stringhe: "at": 400, non "at": "400".

I programmi differiscono in quanto sono tolleranti quando un file viola queste regole. L'app desktop ripara ciò che può, come descritto qui sotto. Il nostro strumento per browser, Report Studio, non lo fa: presume che le azioni siano già ordinate, prende la durata dall'ultima azione, ignora inverted e range e rifiuta un file i cui valori at sono stringhe. Un file che segue tutte e cinque le convenzioni evita queste differenze.

Come AutoScript Sync legge un file

Quando apri uno script con Load Funscript…, lo trascini sulla finestra o apri un video con accanto uno script con lo stesso nome, l'app ripara le azioni invece di rifiutare il file:

  • ordina le azioni per tempo;
  • unisce le azioni che condividono lo stesso tempo, tenendo l'ultima;
  • limita pos a 0–100 e porta a 0 i tempi negativi;
  • salta le voci che non riesce a leggere, senza dire quante sono;
  • legge range ma non lo usa mai per riscalare, quindi un file con un range diverso da 100 viene comunque trattato come 0–100;
  • mantiene version così com'è ("1.0" se manca).

Il prossimo aggiornamento (2.121.2, già compilato ma non ancora rilasciato) fa sì che il lettore accetti più file e conservi più del loro contenuto:

  • i file salvati con un byte-order mark, o in UTF-16, si caricano invece di essere rifiutati;
  • inverted: true viene applicato una volta al caricamento (100 − pos), con un avviso per te, e il file viene salvato di nuovo con inverted: false, così ogni altro player vede lo stesso movimento. L'app rilasciata ignora il flag, quindi un file invertito viene riprodotto al contrario;
  • i valori frazionari di at e pos vengono arrotondati al numero intero più vicino, e i valori NaN o infiniti vengono saltati;
  • le chiavi di primo livello sconosciute, come capitoli o segnalibri, vengono conservate e riscritte quando salvi; l'app rilasciata le scarta al salvataggio;
  • un file che non è testo, non è JSON, non è un oggetto o non ha una lista actions riceve un messaggio in linguaggio semplice, e uno script senza azioni utilizzabili non viene associato al video.

Come AutoScript Sync scrive un file

Ogni script salvato dall'app, generato o modificato, segue le convenzioni sopra, qualunque cosa sia successa nell'editor:

  • Azioni: sono scritte in ordine di tempo crescente, con tempi unici, at come numero intero non negativo di millisecondi e pos come numero intero da 0 a 100. Se due punti si arrotondano allo stesso millisecondo, vince il successivo.
  • Intestazione: version, inverted e range sono scritti così come sono; uno script generato riceve "1.0", false e 100.
  • Metadati: creator è sempre impostato su "AutoScript Sync" e format su "funscript". Salvare sopra lo script di un altro strumento ne sostituisce il creator.
  • Dettagli dell'analisi negli script generati: generatore, riepilogo del riconoscimento, tempi, percorso di tracciamento e un blocco ai con l'etichetta del tipo di scena di ogni finestra di due secondi, la regione tracciata, quanto è stato riempito anziché misurato e i punteggi dell'elezione dell'ancora.
  • Salvataggio sicuro: il JSON viene scritto, indentato, in un file temporaneo e poi sostituito, così un crash a metà salvataggio non può corrompere lo script esistente.
  • Backup: quando Generate salva accanto al video, uno script esistente viene prima copiato in <name>.funscript.bak. Viene tenuto un solo backup; il Generate successivo lo sovrascrive.

Il file su disco non viene mai adattato a un dispositivo. Quando l'app invia uno script all'Autoblow AI Ultra, adatta una copia ai limiti del dispositivo e rimuove i metadati dell'analisi, mantenendo solo il movimento e alcuni campi dell'intestazione (generator, creator, format, version, range, stroke_expansion e un id se presente).

Errori comuni e come trovarli

Il validatore di funscript controlla ciascuno di questi nel tuo browser, senza caricare il file, ed elenca i problemi che trova.

JSON non valido
Una virgola o una parentesi mancante, oppure una virgola finale dopo l'ultima azione. Niente può leggere il file finché non viene corretto.
Azioni mancanti o malformate
Nessuna chiave actions, oppure voci senza at e pos numerici.
Tempi fuori ordine
Di solito deriva dall'unione di due script o dalla modifica a mano. I programmi che presumono azioni ordinate mostrano una durata sbagliata o salti nella riproduzione.
Tempi ripetuti
Due punti con lo stesso at e posizioni diverse: un player non può trovarsi in due posti contemporaneamente.
Posizioni fuori da 0–100
Un pos sotto 0 o sopra 100 punta fuori dall'intervallo che un player mappa sul dispositivo.
Movimenti troppo veloci per il dispositivo
Non è un errore di formato, ma un grande salto in poco tempo chiede più di quanto un dispositivo possa fare. Il validatore segnala i segmenti oltre un limite di velocità che imposti tu, 400 unità al secondo per impostazione predefinita.

Quando il file è JSON valido con una lista actions, il validatore offre una copia riparata: ordinata per tempo, con i tempi duplicati uniti, le posizioni limitate a 0–100 e i valori arrotondati, mantenendo tutto il resto del file. Non può riparare un JSON danneggiato o una lista actions mancante, e non rallenta i movimenti troppo veloci.

Domande

Esiste una specifica ufficiale del funscript?

Questa pagina descrive le convenzioni seguite dai file in circolazione e cosa AutoScript Sync legge e scrive. Non è uno standard formale, e non descriviamo come altri player gestiscono i casi limite.

Quanti punti al secondo dovrebbe avere uno script?

Il formato non fissa una frequenza. I punti vanno dove il movimento cambia direzione. Gli script generati da AutoScript Sync mettono un punto a ogni inversione del movimento misurato, quindi una scena lenta ne ha pochi e una veloce molti.

Perché il mio script dice "creator": "AutoScript Sync" se l'ha fatto qualcun altro?

L'app imprime il suo nome come creator a ogni salvataggio, anche quando salva sopra lo script di un altro strumento. Rimetti il nome dell'autore originale nei metadati, o nel tuo post, quando lo condividi.

AutoScript Sync conserva i capitoli e altre chiavi extra?

Nel prossimo aggiornamento (2.121.2), sì: le chiavi di primo livello sconosciute vengono conservate e riscritte. La versione rilasciata 2.121.1 le scarta al salvataggio, quindi tieni una copia dell'originale.

Da leggere dopo

Genera script ben formati dai tuoi video

AutoScript Sync scrive funscript standard accanto ai tuoi video; la prova è l'app completa per un giorno.