3行でいうと

  • 公式が用意していて手順を読めたのは、(1) ユーザースクリプト(文章生成の画面をTypeScriptで拡張)、(2) 画像のメタデータと、Vibeなどの書き出し・読み込み、(3) 物語のZIP書き出し、です。
  • スクリプトは、隔離された環境(Web Worker)で動き、任意の通信と、ほとんどのアカウント情報には触れません。使える権限は、スクリプトがユーザーに許可を求める形です。
  • スクリプトから呼べるAIの生成は、公式ページでは文章生成(GLM 4.6)で、出力と入力にトークンの制限があります。画像生成のAPIは、読んだ範囲のスクリプトのAPI一覧に見つかりません。
  • 「Get Persistent API Token」は、アカウント設定のボタンです。新しく作ると古いものは無効になり、表示は1回だけです。トークンの使い道を書いた公式ページは、読めませんでした。
  • 外部のAI(ChatGPT、Claudeなど)とMCPなどでつなぐ公式の手順は、見つかりませんでした。「ない」と断定はしません。

この記事は、公式の資料を2026年10月25日に読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。

先に結論

前提:用語をそろえる

連携の一覧(公式の記述の有無)

入口 公式の記述 この記事で手順を書けるか
ユーザースクリプト Scriptingのページ群にある(導入、API Reference、Hooks、Permissions など) 書ける(下の「連携1」)
スクリプトからの文章生成(GLM 4.6) Generating Text のページにある 書ける(「連携2」)
スクリプトからの画像生成 API一覧に見つからない。API Referenceの読んだ範囲に、画像生成の関数は見つからなかった(後半は未読) 書けない
Persistent API Token Accountのページに、ボタンと警告の記述がある ボタンの場所と性質まで(「連携3」)
NovelAIのAPI仕様書 api.novelai.net/docs は、題名のみ取得 書けない
画像のメタデータ・保存・読み戻し FAQ、チュートリアル、Historyに記述がある 書ける(「連携4」)
Vibeの書き出し・読み込み Vibe Transferのページに記述がある 書ける(「連携4」)
物語の書き出し Accountのページ、FAQに記述がある 書ける(「連携5」)
MCP、外部AI向けのプラグイン 目次、FAQに記載が見つからない 書けない

連携1:ユーザースクリプトを開く・入れる・止める

手順:スクリプトの画面を開く

公式のScripting導入ページが書いている入口は、3通りです。

  1. 画面左のサイドバーの ガチョウのメニュー(goose menu) を開く。
  2. 物語を選んでいるときは、右サイドバーの advanced タブから開く。
  3. Alt+X を押す。

開くと User Scripts のモーダル(重なって出る画面)が出ます。公式は、ここでスクリプトの取り込み、作成、変更をする、と書いています。ボタンの表記は、読んだページには書かれていません。「公式で確認できていない」です。

2種類のスクリプト

種類(公式の表記) 保存先 読み込まれるとき
Account scripts アカウント どの物語を選んでいても
Story scripts その物語のファイル その物語を開いているときだけ

手順:公式の例のスクリプトを手に入れる

  1. 公式ドキュメントが案内する GitHub の NovelAI/novelai-script-examples を開く。
  2. 中身は、scenarios/ と scripts/ のフォルダー、LICENSE(MIT)、README。READMEが挙げる例は、次のとおりです。
  3. Scripting Demo(Crystal Dragon Encounter、.scenario):多くの機能を見せるシナリオ
  4. Bookmarks:物語の履歴の位置を保存して戻る
  5. Editor Probabilities Everywhere:右クリックで、次のトークンの確率を見る
  6. Find & Replace:検索と置換
  7. Joke Generator:APIで文章を生成する基本の例
  8. Notes:エディターの下にメモのパネルを足す
  9. Smart Summarizer:選んだ文章の要約を、右クリックで出す
  10. Thought Generator:登場人物の考えを、物語の文脈から生成する
  11. Retry Harder:特別なプロンプトを使うもう1つのリトライボタン
  12. TTS with Character Voices:登場人物ごとの声で読み上げる
  13. ファイルは .naiscript と .scenario の形式です。導入ページは、リンク先のファイルが新しいタブで開いたら、保存するか、ページを保存するよう書いています。
  14. 取り込みの手順(User Scriptsのモーダルのどのボタンか)は、READMEにも導入ページにも書かれていません。「公式で確認できていない」です。

注意:このリポジトリのページは、自分から「公式」とは書いていません。NovelAIのGitHub組織の下にあり、公式のスクリプトのドキュメントが案内しているリポジトリです。

手順:スクリプトで画面がおかしくなったとき

公式の導入ページが書いている手順です。

  1. URLの末尾に ?noscript=true を付ける。
  2. ページを読み込み直す。スクリプトが読み込まれなくなる。
  3. User Scriptsのモーダルを開き、問題のスクリプトを無効にするか、取り除く。

スクリプトにできないこと(公式の制限)

権限(Permissions):スクリプトがユーザーに許可を求める

公式のPermissionsのページが書いていることです。

操作 内容
持っているか調べる api.v1.permissions.has('権限名')
許可を求める api.v1.permissions.request('権限名')。ユーザーに説明のダイアログが出て、許可か拒否を選ぶ。許可なら true、拒否なら false。すでに許可ずみなら、すぐ true
許可ずみの一覧 api.v1.permissions.list()

公式の例(短いもの):

let granted = await api.v1.permissions.request('storyEdit');

スクリプトの「外し方」

連携2:スクリプトから、別のAIモデル(GLM 4.6)に文章を生成させる

公式が書いていること

こと 公式の書き方(要約)
呼び方 api.v1.generate(メッセージの配列, 設定, 途中経過のコールバック, 動作)
メッセージ 各要素に role(user、assistant、system)と content(文字列)
設定 model(必須。例は glm-4-6)、temperature、max_tokens、top_p、top_k、frequency_penalty、presence_penalty、stop
対象のモデル OpenAI風のcompletionsのエンドポイントを使うモデルだけ。API Referenceは、「いまは会話形式だけで、GLM 4.6を使う」と読める書き方
ストリーミング 既定で流れる。第3引数のコールバックが (choices, final) を受け取る
ブロック 既定では、エディターの操作とユーザーの生成を止める。第4引数に 'background' を渡すと、生成中も操作できる
出力の制限 スクリプトごとに、4分あたり2048トークン。4分たつか、ユーザーがスクリプトのUIを操作/エディターで手動生成すると戻る
入力の制限 ユーザーのプランのモデルの最大コンテキストの2倍を、6分あたり。新しい(キャッシュされていない)入力トークンだけ数える。キャッシュは64トークン単位
エディターへの生成 api.v1.editor.generate は、Sendボタンと同じように文書に追加する。ユーザーの操作なしでは、3回まで

この記事の例(動作は確かめていません)

公式のページが書いている呼び方に合わせて、この記事で組んだ最小の形です。公式の例の写しではありません。

const response = await api.v1.generate(
  [{ role: "user", content: "Write one sentence about a lighthouse." }],
  { model: "glm-4-6", max_tokens: 100 }
);
api.v1.log(response.choices[0].text);

フック(hooks):生成のタイミングに割り込む

api.v1.hooks.register(フック名, 関数) で登録します。1つのスクリプトは、1つのフックにつき、1つの関数だけ持てます(再登録すると置き換わる)。

フック 発火のタイミング(公式の書き方の要約)
onGenerationRequested ユーザーが文章を生成するとき、最初。生成を止めることもできる
onBeforeContextBuild 文脈を組み立てる直前。dryRun で、生成のためかどうかを見分ける
onContextBuilt 文脈ができたとき。メッセージの配列を書き換えて返せる
onResponse 応答のデータが届くたび。文章やトークンIDを書き換えられる。最後の呼び出しは final が true
onGenerationEnd 生成の完了または中止のあと
onScriptsLoaded すべてのスクリプトが読み込まれた後に1回
onLorebookEntrySelected ロアブックの項目やカテゴリーを選んだとき
onTextAdventureInput テキストアドベンチャーの入力欄に送信したとき
onHistoryNavigated 取り消し、やり直し、リトライ、履歴の移動をしたとき
onDocumentConvertedToText 文書がテキストに変換されたとき(文脈づくりなど)

画面の部品を足す(UI拡張)

api.v1.ui.register([{ type: 'toolbarButton', text: 'Example Button', callback: () => api.v1.log('Clicked') }])

スクリプトとAIの間で渡るデータ

連携3:Persistent API Token(ボタンの場所と性質まで)

手順

  1. User Settingsの Account を開く。(経路は、FAQが「User Settings>Account」、Subscriptionページが「user settings メニューの Account」と書いています。手元の画面と照らしてください。)
  2. Get Persistent API Token を押す。
  3. 出たポップアップのトークンを、閉じる前に控える。閉じると、二度と見られません。
  4. 新しく作り直すと、前のトークンは無効になります。

公式の記述の範囲

こと 記述
何のトークンか 「NovelAI API」のトークン(Accountのページ)
使える先、権限の範囲、期限 読んだページに記載が見つからない
取り消し専用のボタン 記載が見つからない。作り直すと古いものが無効になる、とだけ書かれている
APIの呼び方 仕様書(api.novelai.net/docs)は、題名しか取得できなかった

連携4:画像の設定・参照画像を持ち出す

メタデータつきで保存し、戻す(FAQ、チュートリアル)

  1. 画像の下の 保存アイコン で保存する。右クリックの保存やクリップボードでは、プロンプト・seed・設定が入りません。
  2. 戻すとき:保存した画像を、NovelAIのサイトにドラッグ&ドロップする。または novelai.net/inspect の検査ツールを使う。
  3. seedも読み込まれるのが既定です。違う絵がほしいときは、seedの値を押して消します。

別の道具の側から設定を読む方法は、公式の資料の範囲では確認できていません。

Vibeの書き出し・読み込み(Vibe Transferのページ、V4以上)

  1. 画像をvibeとして入れ、エンコードする。
  2. .naiv4vibe:エンコードのあとにダウンロードする。元画像、サムネイル、使った値のエンコードが入る。読み込みは、ふつうのVibe Transferの画像と同じように、ドラッグして戻す。
  3. Export Bundle:現在のvibeを1つの .naiv4vibeBundle にまとめる。
  4. Export as Encodings:サムネイルや調整の選択肢のない形で書き出す。
  5. PNGをDownloadで保存すると、vibeが画像に埋め込まれる。貼り付けでは入りません。読み込むとき、今のvibeを置き換えるか、Append(追加)を選ぶ。
  6. 埋め込まれたvibeは、エンコード済みなので、エンコードの費用はかからない。ただし Information Extracted の値は変えられない。

Canvasのファイル(Canvasのページ)

連携5:物語を持ち出す

何を 方法(公式の表記) 書かれている場所
すべての物語 Accountの Download All Stories(.zip) Account、FAQ
物語を保存する先の既定 Default Storage Location(公式は「Keep this set to Server.」と書く) Account
保存先が食い違うときの確認 Ignore Remote Story Conflicts(オンにすると、ポップアップが出なくなる) Account
シナリオとして書き出す 書き出した物語に Pen Name が付く Account

うまくいかないときの確認点

症状 確認すること
スクリプトを入れたら画面が動かない URLの末尾に ?noscript=true を付けて読み込み直し、User Scriptsのモーダルで無効化/削除(公式の導入ページ)
スクリプトが急に止まった 無効化、物語の切り替え、モーダルを閉じたことで、読み込みが解除される。データはStorage APIに置く(公式)
エラーが画面にもコンソールにも出ない Promiseの拒否は表示されない。.catch か try/catch を使う(公式)
生成を呼んでも進まない/待たされる 出力は4分あたり2048トークン、入力は6分あたりの上限がある。getTimeUntilAllowedOutput などで待ち時間を調べる(公式のGenerating Text)
api.v1.generate が使えない 対象は、OpenAI風のcompletionsのエンドポイントを使うモデルだけ(公式)。model が必須
文書を書き換える関数が動かない documentEdit などの権限が必要(API Reference)。api.v1.permissions.request で許可を求める
画像から設定が戻らない 保存アイコンで保存したか。右クリック保存や貼り付けでは、メタデータが入らない(FAQ)
画像生成のAPIを呼びたい 仕様書の中身を読めていません。公式の資料では確認できていません

気をつけること

出典