Das Funscript-Format, Feld für Feld
Das Funscript-Format ist ein JSON-Objekt mit einem wesentlichen Schlüssel, actions: einer Liste von {"at", "pos"}-Paaren, die zu einem Zeitpunkt in Millisekunden eine Position von 0 bis 100 angeben. Drumherum stehen version, inverted, range und metadata. Diese Seite definiert jedes Feld, die Konventionen, denen Dateien folgen, und genau, was AutoScript Sync beim Lesen und Schreiben einer Datei tut.
Am 21. September 2026 mit dem Code der App abgeglichen. Beschreibt die üblichen Konventionen, keine formale Spezifikation.
Der Aufbau
Ein Funscript ist ein JSON-Objekt, gespeichert als UTF-8-Text mit der Endung .funscript. Eine vollständige kleine Datei, in der Form, in der AutoScript Sync speichert:
{
"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}
]
}
Die letzten zwei Punkte halten vier Sekunden lang dieselbe Position: Eine Pause wird als zwei Punkte mit demselben pos geschrieben, nicht als Lücke. Die Reihenfolge der Schlüssel spielt in JSON keine Rolle, und Leerraum ist frei.
Die Felder
actions- Ein Array von Punkten, jeder ein Objekt mit
atundpos. Das ist das einzige Feld, das ein Player braucht. Eine Datei ohne es ist kein nutzbares Skript. at- Der Zeitpunkt des Punkts in Millisekunden ab Beginn des Videos, als Ganzzahl.
1500ist anderthalb Sekunden nach Beginn. pos- Die Position, die zu diesem Zeitpunkt erreicht sein soll, als Ganzzahl von 0 bis 100. Was 0 und 100 physisch bedeuten, hängt vom Gerät und seinen Einstellungen ab; die Datei sagt nur „so weit im Bereich“.
version- Die Formatversion als String, meist
"1.0". invertedtrueoderfalse. Bei true sollen Positionen umgekehrt gelesen werden, als100 − pos.range- Eine Zahl, meist
100, die die Spanne vonposbeschreibt. Die meisten Dateien lassen sie bei 100. metadata- Ein Objekt für alles rund um das Skript: das Programm, das es erstellt hat, einen Titel, Notizen, Tags. Player brauchen es nicht, um die Datei abzuspielen.
Dateien aus Editoren enthalten oft zusätzliche Schlüssel auf oberster Ebene, etwa Kapitel oder Lesezeichen. Das ist erlaubt; ein Leser, der sie nicht versteht, sollte sie ignorieren und idealerweise beibehalten.
Konventionen, denen eine korrekt aufgebaute Datei folgt
atist eine ganze Zahl von Millisekunden, gezählt ab dem Anfang des Videos, niemals negativ.posist eine ganze Zahl von 0 bis 100.- Die Aktionen sind nach
atsortiert, die früheste zuerst. - Keine zwei Aktionen haben denselben
at-Wert. - Zahlen sind JSON-Zahlen, keine Strings:
"at": 400, nicht"at": "400".
Programme gehen unterschiedlich nachsichtig mit Dateien um, die diese Regeln verletzen. Die Desktop-App repariert, was sie kann, wie unten beschrieben. Unser eigenes Browser-Tool, Report Studio, tut das nicht: Es geht davon aus, dass die Aktionen bereits sortiert sind, nimmt die Dauer von der letzten Aktion, ignoriert inverted und range und lehnt eine Datei ab, deren at-Werte Strings sind. Eine Datei, die alle fünf Konventionen einhält, umgeht diese Unterschiede.
Wie AutoScript Sync eine Datei liest
Wenn du ein Skript mit Load Funscript… öffnest, es auf das Fenster ziehst oder ein Video mit einem gleichnamigen Skript daneben öffnest, repariert die App die Aktionen, statt die Datei abzulehnen:
- sie sortiert die Aktionen nach Zeit;
- sie führt Aktionen mit derselben Zeit zusammen und behält die letzte;
- sie begrenzt
posauf 0–100 und setzt negative Zeiten auf 0; - sie überspringt Einträge, die sie nicht lesen kann, ohne zu sagen, wie viele;
- sie liest
range, skaliert damit aber nie um, sodass eine Datei mit einem anderen Bereich als 100 trotzdem als 0–100 behandelt wird; - sie behält
versionwie vorgefunden ("1.0", falls es fehlt).
Das nächste Update (2.121.2, gebaut, aber noch nicht veröffentlicht) lässt den Leser mehr Dateien akzeptieren und mehr von ihrem Inhalt behalten:
- Dateien, die mit Byte-Order-Mark oder als UTF-16 gespeichert sind, werden geladen statt abgelehnt;
inverted: truewird beim Laden einmal angewendet (100 − pos), mit einem Hinweis an dich, und die Datei wird mitinverted: falsezurückgespeichert, sodass jeder andere Player dieselbe Bewegung sieht. Die veröffentlichte App ignoriert das Flag, sodass eine invertierte Datei auf dem Kopf abgespielt wird;- gebrochene
at- undpos-Werte werden auf die nächste ganze Zahl gerundet, und NaN- oder unendliche Werte werden übersprungen; - unbekannte Schlüssel auf oberster Ebene wie Kapitel oder Lesezeichen bleiben erhalten und werden beim Speichern zurückgeschrieben; die veröffentlichte App verwirft sie beim Speichern;
- eine Datei, die kein Text, kein JSON, kein Objekt ist oder keine
actions-Liste hat, bekommt eine verständliche Meldung, und ein Skript ohne verwendbare Aktionen wird nicht an das Video gehängt.
Wie AutoScript Sync eine Datei schreibt
Jedes Skript, das die App speichert, ob generiert oder bearbeitet, hält die obigen Konventionen ein, egal was im Editor passiert ist:
- Aktionen werden in aufsteigender Zeitfolge geschrieben, mit eindeutigen Zeiten,
atals nicht negative ganze Zahl von Millisekunden undposals ganze Zahl von 0 bis 100. Wenn zwei Punkte auf dieselbe Millisekunde gerundet werden, gewinnt der spätere. - Header:
version,invertedundrangewerden so geschrieben, wie sie vorliegen; ein generiertes Skript bekommt"1.0",falseund100. - Metadaten:
creatorwird immer auf"AutoScript Sync"gesetzt undformatauf"funscript". Wer das Skript eines anderen Tools überschreibt, ersetzt dessen Creator. - Analysedetails in generierten Skripten: Generator, Erkennungsübersicht, Timing, Tracking-Pfad und ein
ai-Block mit dem Szenentyp-Label jedes Zwei-Sekunden-Fensters, dem verfolgten Bereich, wie viel aufgefüllt statt gemessen wurde, und den Punktzahlen der Ankerwahl. - Sicheres Speichern: Das JSON wird eingerückt in eine temporäre Datei geschrieben und dann ausgetauscht, sodass ein Absturz mitten im Speichern das vorhandene Skript nicht beschädigen kann.
- Sicherung: Wenn Generate neben dem Video speichert, wird ein vorhandenes Skript zuerst nach
<name>.funscript.bakkopiert. Es wird nur eine Sicherung behalten; das nächste Generate überschreibt sie.
Die Datei auf der Festplatte wird nie an ein Gerät angepasst. Wenn die App ein Skript an den Autoblow AI Ultra sendet, passt sie eine Kopie an die Grenzen des Geräts an und entfernt die Analyse-Metadaten; übrig bleiben nur die Bewegung und einige Header-Felder (generator, creator, format, version, range, stroke_expansion und eine id, falls vorhanden).
Häufige Fehler und wie du sie findest
Der Funscript-Validator prüft jeden davon in deinem Browser, ohne die Datei hochzuladen, und listet die gefundenen Probleme auf.
- Ungültiges JSON
- Ein fehlendes Komma oder eine fehlende Klammer, oder ein überzähliges Komma nach der letzten Aktion. Nichts kann die Datei lesen, bis das behoben ist.
- Fehlende oder fehlerhafte Aktionen
- Kein
actions-Schlüssel, oder Einträge ohne numerischesatundpos. - Zeiten in falscher Reihenfolge
- Meist durch das Zusammenfügen zweier Skripte oder Bearbeitung von Hand. Programme, die sortierte Aktionen voraussetzen, zeigen eine falsche Dauer an oder springen beim Abspielen.
- Doppelte Zeiten
- Zwei Punkte mit demselben
atund unterschiedlichen Positionen: Ein Player kann nicht an zwei Orten zugleich sein. - Positionen außerhalb von 0–100
- Ein
posunter 0 oder über 100 zeigt außerhalb des Bereichs, den ein Player auf das Gerät abbildet. - Bewegungen zu schnell für das Gerät
- Kein Formatfehler, aber ein großer Sprung in kurzer Zeit verlangt mehr, als ein Gerät leisten kann. Der Validator markiert Abschnitte über einem von dir festgelegten Tempolimit, standardmäßig 400 Einheiten pro Sekunde.
Wenn die Datei gültiges JSON mit einer actions-Liste ist, bietet der Validator eine reparierte Kopie an: nach Zeit sortiert, doppelte Zeiten zusammengeführt, Positionen auf 0–100 begrenzt und Werte gerundet, wobei alles andere in der Datei erhalten bleibt. Kaputtes JSON oder eine fehlende actions-Liste kann er nicht reparieren, und zu schnelle Bewegungen bremst er nicht ab.
Fragen
Gibt es eine offizielle Funscript-Spezifikation?
Diese Seite beschreibt die Konventionen, denen verbreitete Dateien folgen, und was AutoScript Sync liest und schreibt. Sie ist kein formeller Standard, und wir beschreiben nicht, wie andere Player Grenzfälle behandeln.
Wie viele Punkte pro Sekunde sollte ein Skript haben?
Das Format legt keine Rate fest. Punkte gehören dorthin, wo die Bewegung umkehrt. Die generierten Skripte von AutoScript Sync setzen an jeder Umkehr der gemessenen Bewegung einen Punkt, sodass eine langsame Szene wenige und eine schnelle viele hat.
Warum steht in meinem Skript "creator": "AutoScript Sync", obwohl es jemand anderes gemacht hat?
Die App trägt bei jedem Speichern ihren Namen als Creator ein, auch wenn sie das Skript eines anderen Tools überschreibt. Trag den Namen des ursprünglichen Autors wieder in die Metadaten oder in deinen Beitrag ein, wenn du es teilst.
Behält AutoScript Sync Kapitel und andere zusätzliche Schlüssel?
Im nächsten Update (2.121.2) ja: Unbekannte Schlüssel auf oberster Ebene bleiben erhalten und werden zurückgeschrieben. Die veröffentlichte Version 2.121.1 verwirft sie beim Speichern, also behalte eine Kopie des Originals.
Weiterlesen
- Eine Datei mit dem Validator prüfenFindet die Fehler von dieser Seite in deinem Browser und bietet eine reparierte Kopie an.
- Eine verständliche EinführungWas ein Funscript ist und wie ein Gerät es nutzt, ohne die Felddetails.
- Ein Skript erstellen, von Hand oder generiertDer Ablauf vom Video bis zur gespeicherten, geprüften Datei.
- Der LernbereichAlle vier Referenzseiten.
Erstelle sauber aufgebaute Skripte aus deinen Videos
AutoScript Sync schreibt Standard-Funscripts neben deine Videos; die Testversion ist die volle App für einen Tag.