El formato funscript, campo por campo

El formato funscript es un objeto JSON con una clave esencial, actions: una lista de pares {"at", "pos"} que dan una posición de 0 a 100 en un momento en milisegundos. A su alrededor están version, inverted, range y metadata. Esta página define cada campo, las convenciones que siguen los archivos y exactamente qué hace AutoScript Sync cuando lee y escribe uno.

Comprobado con el código de la aplicación el 21 de septiembre de 2026. Describe las convenciones comunes, no una especificación formal.

La estructura

Un funscript es un único objeto JSON guardado como texto UTF-8 con la extensión .funscript. Un archivo pequeño completo, con la forma en que lo guarda 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}
  ]
}

Los dos últimos puntos mantienen la misma posición durante cuatro segundos: un reposo se escribe como dos puntos con el mismo pos, no como un hueco. En JSON el orden de las claves no importa, y los espacios en blanco son libres.

Los campos

actions
Un array de puntos, cada uno un objeto con at y pos. Es el único campo que necesita un reproductor. Un archivo sin él no es un script utilizable.
at
El momento del punto en milisegundos desde el inicio del vídeo, como número entero. 1500 es segundo y medio.
pos
La posición en la que estar en ese momento, como número entero de 0 a 100. Lo que significan físicamente 0 y 100 depende del dispositivo y sus ajustes; el archivo solo dice "hasta aquí del rango".
version
La versión del formato como cadena, normalmente "1.0".
inverted
true o false. Cuando es true, las posiciones deben leerse invertidas, como 100 − pos.
range
Un número, normalmente 100, que describe la amplitud de pos. La mayoría de los archivos lo dejan en 100.
metadata
Un objeto para cualquier cosa sobre el script: el programa que lo creó, un título, notas, etiquetas. Los reproductores no lo necesitan para reproducir el archivo.

Los archivos de los editores suelen llevar claves adicionales de nivel superior, como capítulos o marcadores. Están permitidas; un lector que no las entienda debería ignorarlas y, idealmente, conservarlas.

Convenciones que sigue un archivo bien formado

  • at es un número entero de milisegundos, contado desde el inicio del vídeo, nunca negativo.
  • pos es un número entero de 0 a 100.
  • Las acciones están ordenadas por at, de la más temprana a la más tardía.
  • Dos acciones nunca comparten el mismo at.
  • Los números son números JSON, no cadenas: "at": 400, no "at": "400".

Los programas difieren en cuánto toleran un archivo que incumple estas reglas. La aplicación de escritorio repara lo que puede, como se describe más abajo. Nuestra propia herramienta de navegador, Report Studio, no lo hace: da por hecho que las acciones ya están ordenadas, toma la duración de la última acción, ignora inverted y range, y rechaza un archivo cuyos valores at sean cadenas. Un archivo que sigue las cinco convenciones evita esas diferencias.

Cómo lee un archivo AutoScript Sync

Cuando abres un script con Load Funscript…, lo sueltas en la ventana o abres un vídeo con un script del mismo nombre al lado, la aplicación repara las acciones en lugar de rechazar el archivo:

  • ordena las acciones por tiempo;
  • fusiona las acciones que comparten tiempo y conserva la última;
  • limita pos a 0–100 y los tiempos negativos a 0;
  • omite las entradas que no puede leer, sin decir cuántas;
  • lee range pero nunca lo usa para reescalar, así que un archivo con un rango distinto de 100 se sigue tratando como 0–100;
  • conserva version tal como la encuentra ("1.0" si falta).

La próxima actualización (2.121.2, ya compilada pero aún no publicada) hace que el lector acepte más archivos y conserve más de lo que contienen:

  • los archivos guardados con marca de orden de bytes (BOM), o en UTF-16, se cargan en lugar de rechazarse;
  • inverted: true se aplica una vez al cargar (100 − pos), con un aviso para ti, y el archivo se vuelve a guardar con inverted: false, de modo que cualquier otro reproductor vea el mismo movimiento. La aplicación publicada ignora el indicador, así que un archivo invertido se reproduce al revés;
  • los valores fraccionarios de at y pos se redondean al número entero más cercano, y los valores NaN o infinitos se omiten;
  • las claves de nivel superior desconocidas, como capítulos o marcadores, se conservan y se vuelven a escribir al guardar; la aplicación publicada las elimina al guardar;
  • un archivo que no es texto, no es JSON, no es un objeto o no tiene lista actions recibe un mensaje en lenguaje claro, y un script sin acciones utilizables no se asocia al vídeo.

Cómo escribe un archivo AutoScript Sync

Cada script que guarda la aplicación, generado o editado, sigue las convenciones anteriores, pase lo que pase en el editor:

  • Las acciones se escriben en orden de tiempo ascendente, con tiempos únicos, at como número entero no negativo de milisegundos y pos como número entero de 0 a 100. Si dos puntos se redondean al mismo milisegundo, gana el posterior.
  • Cabecera: version, inverted y range se escriben tal como están; un script generado recibe "1.0", false y 100.
  • Metadatos: creator siempre se establece en "AutoScript Sync" y format en "funscript". Guardar encima del script de otra herramienta sustituye su creador.
  • Detalles del análisis en los scripts generados: generador, resumen del reconocimiento, tiempos, ruta de seguimiento y un bloque ai con la etiqueta de tipo de escena de cada ventana de dos segundos, la región seguida, cuánto se rellenó en lugar de medirse y las puntuaciones de la elección de ancla.
  • Guardado seguro: el JSON se escribe, con sangría, en un archivo temporal y luego se intercambia, así que un fallo a mitad del guardado no puede corromper el script existente.
  • Copia de seguridad: cuando Generate guarda junto al vídeo, cualquier script existente se copia primero a <name>.funscript.bak. Solo se conserva una copia; el siguiente Generate la sobrescribe.

El archivo en disco nunca se ajusta a un dispositivo. Cuando la aplicación envía un script al Autoblow AI Ultra, ajusta una copia a los límites del dispositivo y quita los metadatos del análisis, conservando solo el movimiento y unos pocos campos de cabecera (generator, creator, format, version, range, stroke_expansion y un id si lo hay).

Errores comunes y cómo encontrarlos

El validador de funscripts comprueba cada uno de ellos en tu navegador, sin subir el archivo, y enumera los problemas que encuentra.

JSON no válido
Falta una coma o un corchete, o sobra una coma tras la última acción. Nada puede leer el archivo hasta que se corrija.
Acciones ausentes o mal formadas
No hay clave actions, o hay entradas sin at y pos numéricos.
Tiempos desordenados
Suele ocurrir al unir dos scripts o al editar a mano. Los programas que dan por hecho que las acciones están ordenadas muestran una duración errónea o la reproducción da saltos.
Tiempos repetidos
Dos puntos en el mismo at con posiciones distintas: un reproductor no puede estar en dos sitios a la vez.
Posiciones fuera de 0–100
Un pos por debajo de 0 o por encima de 100 apunta fuera del rango que un reproductor asigna al dispositivo.
Movimientos demasiado rápidos para el dispositivo
No es un error de formato, pero un salto grande en poco tiempo pide más de lo que un dispositivo puede hacer. El validador señala los tramos que superan un límite de velocidad que tú fijas, 400 unidades por segundo por defecto.

Cuando el archivo es JSON válido con una lista actions, el validador ofrece una copia reparada: ordenada por tiempo, con los tiempos duplicados fusionados, las posiciones limitadas a 0–100 y los valores redondeados, conservando todo lo demás del archivo. No puede reparar un JSON roto ni una lista actions ausente, y no ralentiza los movimientos demasiado rápidos.

Preguntas

¿Existe una especificación oficial de funscript?

Esta página describe las convenciones que siguen los archivos en circulación y lo que AutoScript Sync lee y escribe. No es un estándar formal, y no describimos cómo gestionan otros reproductores los casos límite.

¿Cuántos puntos por segundo debe tener un script?

El formato no fija ninguna frecuencia. Los puntos van donde el movimiento cambia de sentido. Los scripts generados por AutoScript Sync ponen un punto en cada inversión del movimiento medido, así que una escena lenta tiene pocos y una rápida, muchos.

¿Por qué mi script dice "creator": "AutoScript Sync" si lo hizo otra persona?

La aplicación estampa su nombre como creador en cada guardado, incluido un guardado encima del script de otra herramienta. Vuelve a poner el nombre del autor original en los metadatos, o en tu publicación, cuando lo compartas.

¿AutoScript Sync conserva los capítulos y otras claves adicionales?

En la próxima actualización (2.121.2), sí: las claves de nivel superior desconocidas se conservan y se vuelven a escribir. La versión publicada 2.121.1 las elimina al guardar, así que guarda una copia del original.

Sigue leyendo

Genera scripts bien formados a partir de tus vídeos

AutoScript Sync escribe funscripts estándar junto a tus vídeos; la prueba es la aplicación completa durante un día.