Le format funscript, champ par champ
Le format funscript est un objet JSON avec une seule clé essentielle, actions : une liste de paires {"at", "pos"} donnant une position de 0 à 100 à un instant en millisecondes. Autour se trouvent version, inverted, range et metadata. Cette page définit chaque champ, les conventions suivies par les fichiers, et exactement ce que fait AutoScript Sync quand il en lit et en écrit un.
Vérifié par rapport au code de l'application le 21 septembre 2026. Décrit les conventions courantes, pas une spécification formelle.
La structure
Un funscript est un objet JSON enregistré en texte UTF-8 avec l'extension .funscript. Un petit fichier complet, sous la forme qu'enregistre 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}
]
}
Les deux derniers points gardent la même position pendant quatre secondes : une pause s'écrit avec deux points au même pos, pas avec un trou. L'ordre des clés n'a pas d'importance en JSON, et les espaces sont libres.
Les champs
actions- Un tableau de points, chacun étant un objet avec
atetpos. C'est le seul champ dont un lecteur a besoin. Un fichier sans lui n'est pas un script utilisable. at- Le moment du point en millisecondes depuis le début de la vidéo, sous forme d'entier.
1500correspond à une seconde et demie. pos- La position à atteindre à ce moment, sous forme d'entier de 0 à 100. Ce que 0 et 100 signifient physiquement dépend de l'appareil et de ses réglages ; le fichier dit seulement « à tel point de l'amplitude ».
version- La version du format sous forme de chaîne, généralement
"1.0". invertedtrueoufalse. Si true, les positions doivent être lues à l'envers, comme100 − pos.range- Un nombre, généralement
100, qui décrit l'étendue depos. La plupart des fichiers le laissent à 100. metadata- Un objet pour tout ce qui concerne le script : le programme qui l'a créé, un titre, des notes, des tags. Les lecteurs n'en ont pas besoin pour jouer le fichier.
Les fichiers issus d'éditeurs contiennent souvent des clés supplémentaires au premier niveau, comme des chapitres ou des signets. Elles sont autorisées ; un lecteur qui ne les comprend pas doit les ignorer et, idéalement, les conserver.
Les conventions que suit un fichier bien formé
atest un nombre entier de millisecondes, compté depuis le début de la vidéo, jamais négatif.posest un nombre entier de 0 à 100.- Les actions sont triées par
at, de la plus ancienne à la plus récente. - Deux actions ne partagent jamais le même
at. - Les nombres sont des nombres JSON, pas des chaînes :
"at": 400, et non"at": "400".
Les programmes sont plus ou moins tolérants quand un fichier enfreint ces règles. L'application de bureau répare ce qu'elle peut, comme décrit ci-dessous. Notre propre outil dans le navigateur, Report Studio, ne le fait pas : il suppose que les actions sont déjà triées, prend la durée à partir de la dernière action, ignore inverted et range, et refuse un fichier dont les valeurs at sont des chaînes. Un fichier qui respecte les cinq conventions évite ces différences.
Comment AutoScript Sync lit un fichier
Quand vous ouvrez un script avec Load Funscript…, que vous le déposez sur la fenêtre, ou que vous ouvrez une vidéo accompagnée d'un script du même nom, l'application répare les actions au lieu de refuser le fichier :
- elle trie les actions par temps ;
- elle fusionne les actions qui ont le même temps, en gardant la dernière ;
- elle ramène
posdans 0–100 et les temps négatifs à 0 ; - elle ignore les entrées qu'elle ne peut pas lire, sans dire combien ;
- elle lit
rangemais ne s'en sert jamais pour remettre à l'échelle, donc un fichier avec une plage autre que 100 est quand même traité comme 0–100 ; - elle conserve
versiontel quel ("1.0"s'il manque).
La prochaine mise à jour (2.121.2, compilée mais pas encore publiée) permet au lecteur d'accepter plus de fichiers et de conserver davantage de leur contenu :
- les fichiers enregistrés avec une marque d'ordre des octets (BOM), ou en UTF-16, se chargent au lieu d'être refusés ;
inverted: trueest appliqué une fois au chargement (100 − pos), avec une note pour vous, et le fichier est réenregistré avecinverted: false, pour que tous les autres lecteurs voient le même mouvement. L'application publiée ignore cet indicateur, donc un fichier inversé est joué à l'envers ;- les valeurs
atetposfractionnaires sont arrondies à l'entier le plus proche, et les valeurs NaN ou infinies sont ignorées ; - les clés de premier niveau inconnues, comme les chapitres ou les signets, sont conservées et réécrites à l'enregistrement ; l'application publiée les supprime à l'enregistrement ;
- un fichier qui n'est pas du texte, pas du JSON, pas un objet ou qui n'a pas de liste
actionsreçoit un message en langage clair, et un script sans aucune action utilisable n'est pas associé à la vidéo.
Comment AutoScript Sync écrit un fichier
Chaque script que l'application enregistre, généré ou modifié, respecte les conventions ci-dessus, quoi qu'il se soit passé dans l'éditeur :
- Les actions sont écrites par ordre chronologique croissant, avec des temps uniques,
aten nombre entier positif ou nul de millisecondes etposen nombre entier de 0 à 100. Si deux points s'arrondissent à la même milliseconde, le plus tardif l'emporte. - En-tête :
version,invertedetrangesont écrits tels qu'ils sont en mémoire ; un script généré reçoit"1.0",falseet100. - Métadonnées :
creatorvaut toujours"AutoScript Sync"etformatvaut"funscript". Enregistrer par-dessus le script d'un autre outil remplace son créateur. - Détails d'analyse dans les scripts générés : générateur, résumé de reconnaissance, temps de traitement, chemin de suivi et un bloc
aicontenant, pour chaque fenêtre de deux secondes, l'étiquette de type de scène, la région suivie, la part comblée plutôt que mesurée, et les scores d'élection du point d'ancrage. - Enregistrement sûr : le JSON est écrit, indenté, dans un fichier temporaire puis substitué à l'original, pour qu'un plantage en cours d'enregistrement ne puisse pas corrompre le script existant.
- Sauvegarde : quand Generate enregistre à côté de la vidéo, tout script existant est d'abord copié vers
<name>.funscript.bak. Une seule sauvegarde est conservée ; le Generate suivant l'écrase.
Le fichier sur le disque n'est jamais adapté à un appareil. Quand l'application envoie un script à l'Autoblow AI Ultra, elle adapte une copie aux limites de l'appareil et retire les métadonnées d'analyse, en ne gardant que le mouvement et quelques champs d'en-tête (generator, creator, format, version, range, stroke_expansion et un id s'il existe).
Erreurs courantes, et comment les trouver
Le validateur de funscript vérifie chacune d'elles dans votre navigateur, sans envoyer le fichier, et liste les problèmes qu'il trouve.
- JSON invalide
- Une virgule ou un crochet manquant, ou une virgule en trop après la dernière action. Rien ne peut lire le fichier tant qu'il n'est pas corrigé.
- Actions manquantes ou mal formées
- Pas de clé
actions, ou des entrées sansatetposnumériques. - Temps dans le désordre
- En général après avoir joint deux scripts ou modifié à la main. Les programmes qui supposent des actions triées affichent une mauvaise durée ou font des sauts à la lecture.
- Temps répétés
- Deux points au même
atavec des positions différentes : un lecteur ne peut pas être à deux endroits à la fois. - Positions hors de 0–100
- Un
posinférieur à 0 ou supérieur à 100 pointe hors de la plage qu'un lecteur fait correspondre à l'appareil. - Mouvements trop rapides pour l'appareil
- Ce n'est pas une erreur de format, mais un grand saut en peu de temps demande plus que ce qu'un appareil peut faire. Le validateur signale les segments qui dépassent une limite de vitesse que vous fixez, 400 unités par seconde par défaut.
Quand le fichier est un JSON valide avec une liste actions, le validateur propose une copie réparée : triée par temps, temps en double fusionnés, positions ramenées dans 0–100 et valeurs arrondies, tout le reste du fichier étant conservé. Il ne peut pas réparer un JSON cassé ni une liste actions manquante, et il ne ralentit pas les mouvements trop rapides.
Questions
Existe-t-il une spécification officielle du funscript ?
Cette page décrit les conventions suivies par les fichiers en circulation, et ce qu'AutoScript Sync lit et écrit. Ce n'est pas une norme formelle, et nous ne décrivons pas comment les autres lecteurs gèrent les cas limites.
Combien de points par seconde un script doit-il avoir ?
Le format n'impose aucune fréquence. Les points se placent là où le mouvement change de sens. Les scripts générés par AutoScript Sync placent un point à chaque inversion du mouvement mesuré, donc une scène lente en a peu et une scène rapide beaucoup.
Pourquoi mon script indique-t-il "creator": "AutoScript Sync" alors que quelqu'un d'autre l'a créé ?
L'application inscrit son nom comme créateur à chaque enregistrement, y compris par-dessus le script d'un autre outil. Remettez le nom de l'auteur d'origine dans les métadonnées, ou dans votre message, quand vous le partagez.
AutoScript Sync conserve-t-il les chapitres et autres clés supplémentaires ?
Dans la prochaine mise à jour (2.121.2), oui : les clés de premier niveau inconnues sont conservées et réécrites. La version publiée 2.121.1 les supprime à l'enregistrement, donc gardez une copie de l'original.
À lire ensuite
- Vérifier un fichier avec le validateurTrouve dans votre navigateur les erreurs décrites sur cette page, et propose une copie réparée.
- Une introduction en langage clairCe qu'est un funscript et comment un appareil l'utilise, sans le détail des champs.
- Créer un funscript, à la main ou généréLe processus, de la vidéo au fichier enregistré et vérifié.
- Le centre d'apprentissageLes quatre pages de référence.
Générez des scripts bien formés à partir de vos vidéos
AutoScript Sync écrit des funscripts standard à côté de vos vidéos ; l'essai, c'est l'application complète pendant une journée.