ファンスクリプトのフォーマット、フィールド別解説

ファンスクリプトのフォーマットは、必須のキー actions を 1 つ持つ JSON オブジェクトです:ミリ秒単位の時刻における 0〜100 の位置を示す {"at", "pos"} の組のリストです。その周りに versioninvertedrangemetadata があります。このページでは各フィールド、ファイルが従う慣例、そして AutoScript Sync がファイルを読み書きするときに何をするかを正確に定義します。

2026 年 9 月 21 日にアプリのコードと照合済み。一般的な慣例を説明するもので、正式な仕様ではありません。

構造

ファンスクリプトは、拡張子 .funscript の UTF-8 テキストとして保存された 1 つの JSON オブジェクトです。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}
  ]
}

最後の 2 つのポイントは 4 秒間同じ位置を保ちます:静止は空白ではなく、同じ pos の 2 つのポイントとして書きます。JSON ではキーの順番は関係なく、空白も自由です。

フィールド

actions
ポイントの配列で、それぞれ atpos を持つオブジェクトです。プレーヤーに必要なのはこのフィールドだけです。これがないファイルは、使えるスクリプトではありません。
at
ポイントの時刻。動画の開始からのミリ秒で、整数です。1500 は開始から 1.5 秒です。
pos
その時刻にいるべき位置。0〜100 の整数です。0 と 100 が物理的に何を意味するかはデバイスとその設定次第で、ファイルが示すのは「範囲のどこまで進んだか」だけです。
version
文字列としてのフォーマットのバージョンで、通常は "1.0" です。
inverted
true または false。true の場合、位置は上下反転して 100 − pos として読みます。
range
pos の範囲を表す数値で、通常は 100 です。ほとんどのファイルは 100 のままです。
metadata
スクリプトについての情報を入れるオブジェクト:作成したプログラム、タイトル、メモ、タグなど。プレーヤーがファイルを再生するのに必要ではありません。

エディターで作ったファイルには、チャプターやブックマークなど、トップレベルに追加のキーがあることがよくあります。これは許容されています。理解できないキーは読み込む側で無視し、できればそのまま残すべきです。

正しい形式のファイルが従う慣例

  • at は動画の先頭から数えたミリ秒単位の整数で、負の値にはなりません。
  • pos は 0 から 100 までの整数です。
  • アクションは at の早い順に並んでいます。
  • 同じ at を持つアクションは 2 つとありません。
  • 数値は文字列ではなく JSON の数値です:"at": "400" ではなく "at": 400

これらのルールに反するファイルをどこまで許容するかは、プログラムによって異なります。デスクトップアプリは、下で説明するとおり修復できるものは修復します。私たちのブラウザツール Report Studio は修復しません。アクションが並べ替え済みであることを前提とし、長さを最後のアクションから決め、invertedrange を無視し、at の値が文字列のファイルは受け付けません。5 つの慣例すべてに従ったファイルなら、こうした違いを避けられます。

AutoScript Sync がファイルを読み込む方法

Load Funscript… でスクリプトを開いたとき、ウィンドウにドロップしたとき、または同じ名前のスクリプトが隣にある動画を開いたとき、アプリはファイルを拒否せずにアクションを修復します:

  • アクションを時間順に並べ替えます。
  • 同じ時間を持つアクションを統合し、最後のものを残します。
  • pos を 0〜100 に収め、負の時間を 0 にします。
  • 読み取れないエントリーは、その件数を知らせずにスキップします。
  • range は読み込みますが、再スケーリングには一切使いません。そのため range が 100 以外のファイルも 0〜100 として扱われます。
  • version は見つかったとおりに保持します(ない場合は "1.0")。

次回のアップデート(2.121.2、ビルド済みですがまだリリースされていません)では、より多くのファイルを受け付け、ファイルの内容をより多く保持するようになります:

  • BOM 付きや UTF-16 で保存されたファイルも、拒否されずに読み込まれます。
  • inverted: true は読み込み時に一度だけ適用され(100 − pos)、その旨をお知らせします。ファイルは inverted: false として保存し直されるので、ほかのどのプレーヤーでも同じ動きになります。リリース済みのアプリはこのフラグを無視するため、反転ファイルは上下逆に再生されます。
  • 小数の atpos の値は最も近い整数に丸められ、NaN や無限大の値はスキップされます。
  • チャプターやブックマークなど未知のトップレベルキーは保持され、保存時に書き戻されます。リリース済みのアプリは保存時にこれらを削除します。
  • テキストでない、JSON でない、オブジェクトでない、または actions リストがないファイルには、わかりやすい言葉でメッセージを表示します。使えるアクションが 1 つもないスクリプトは動画に関連付けられません。

AutoScript Sync がファイルを書き出す方法

アプリが保存するスクリプトは、生成したものも編集したものも、エディターで何をしたかに関係なく上記の慣例に従います:

  • アクションは時間の昇順で、時間の重複なしに書き出されます。at はミリ秒単位の負でない整数、pos は 0 から 100 までの整数です。2 つの点が丸めによって同じミリ秒になった場合は、後のほうが残ります。
  • ヘッダーversioninvertedrange は保持している値のまま書き出されます。生成したスクリプトには "1.0"false100 が入ります。
  • メタデータcreator は常に "AutoScript Sync"format"funscript" に設定されます。ほかのツールのスクリプトに上書き保存すると、その creator は置き換えられます。
  • 生成したスクリプトの解析の詳細:ジェネレーター、認識の要約、タイミング、トラッキング経路、そして 2 秒ごとのウィンドウについてシーン種別のラベル、追跡した領域、実測ではなく補完した割合、アンカー選定のスコアを含む ai ブロック。
  • 安全な保存:JSON はインデント付きで一時ファイルに書き出されてから差し替えられるので、保存中にクラッシュしても既存のスクリプトが壊れることはありません。
  • バックアップ:Generate が動画の隣に保存するとき、既存のスクリプトはまず <name>.funscript.bak にコピーされます。バックアップは 1 つだけ保持され、次の Generate で上書きされます。

ディスク上のファイルがデバイスに合わせて調整されることはありません。アプリが Autoblow AI Ultra にスクリプトを送るときは、コピーをデバイスの限界に合わせて調整し、解析メタデータを取り除いて、動きといくつかのヘッダー項目(generator、creator、format、version、range、stroke_expansion、あれば id)だけを残します。

よくある間違いと、その見つけ方

ファンスクリプト検証ツールは、ファイルをアップロードせずにブラウザ上でこれらを一つずつチェックし、見つかった問題を一覧表示します。

不正な JSON
カンマや括弧の抜け、または最後のアクションの後ろに余分なカンマがある状態です。修正するまで、どのプログラムもファイルを読めません。
アクションがない、または形式が不正
actions キーがない、または数値の atpos を持たないエントリーがあります。
時間の順序が乱れている
たいていは 2 つのスクリプトをつなげたり、手で編集したりしたことが原因です。アクションが並べ替え済みであることを前提とするプログラムでは、長さが誤って表示されたり、再生が飛んだりします。
時間の重複
同じ at に位置の異なる 2 つの点がある状態です。プレーヤーは同時に 2 か所にいることはできません。
0〜100 の範囲外の位置
0 未満または 100 を超える pos は、プレーヤーがデバイスに対応付ける範囲の外を指します。
デバイスにとって速すぎる動き
形式上のエラーではありませんが、短時間での大きな移動はデバイスの能力を超える要求になります。検証ツールは、設定した速度上限(既定値は毎秒 400 単位)を超える区間を指摘します。

ファイルが actions リストを持つ有効な JSON であれば、検証ツールは修復したコピーを提供します:時間順に並べ替え、重複した時間を統合し、位置を 0〜100 に収めて値を丸め、ファイルのそれ以外の内容はすべて保持します。壊れた JSON や actions リストの欠落は修復できず、速すぎる動きを遅くすることもしません。

よくある質問

ファンスクリプトの公式仕様はありますか?

このページでは、出回っているファイルが従っている慣例と、AutoScript Sync が何を読み書きするかを説明しています。正式な規格ではなく、ほかのプレーヤーが例外的なケースをどう扱うかについては説明していません。

スクリプトには 1 秒あたりいくつの点が必要ですか?

形式としての頻度の決まりはありません。点は動きが折り返すところに置きます。AutoScript Sync が生成するスクリプトは、測定した動きが反転するたびに点を置くので、ゆっくりしたシーンでは少なく、速いシーンでは多くなります。

ほかの人が作ったスクリプトなのに "creator": "AutoScript Sync" と表示されるのはなぜですか?

アプリは保存のたびに自分の名前を creator として書き込みます。ほかのツールのスクリプトに上書き保存した場合も同じです。共有するときは、元の作者の名前をメタデータか投稿に戻してください。

AutoScript Sync はチャプターなどの追加キーを保持しますか?

次回のアップデート(2.121.2)では、はい:未知のトップレベルキーは保持され、書き戻されます。リリース済みの 2.121.1 は保存時にそれらを削除するので、元のファイルのコピーを残しておいてください。

次に読む

動画から正しい形式のスクリプトを生成

AutoScript Sync は標準的なファンスクリプトを動画の隣に書き出します。体験版は 1 日使える完全版のアプリです。