FORERUNNER // CHARACTER ENGINE · API PREVIEW

生きたキャラクターと世界を、あなたのゲームに。

記憶し、語り、キャラクターを保ち続けるAIキャラクターと、彼らが生きる世界のための、一つのAPI。Mirariを動かすのと同じスタックを、あなたのゲーム・アプリ・エージェントに開放します。

001身体を持つ

プレイヤーが見るものを、見ている。

知覚ストリームを開き、プレイヤーのビューポートをキャラクターへ流し込む。リアルタイムでゲームを見つめ、目の前に実際にあるものに対して語り、反応し、行動する——スクリプトではなく、目撃者として。

SDK
wss · /v1/characters/:id/perceive
C#
// stream the player's view → the character sees the game
var eyes = fr.Characters.Perceive("char_8f2", fps: 4);
// push the camera's render target each frame
void Update() => eyes.Send(playerCamera.Capture());
eyes.OnReaction += r => {
// r.Sees "a dragon landing on the keep wall"
// r.Says "Get down — to the wall, now!"
npc.Perform(r); // r.Act "point", r.Emotion "alarm"
};
Live NPC

あなたの世界の中で

ゲームの中に生きるキャラクター。

あなたの世界に一人組み込めば、プレイヤーを覚え、自らの声で返し、キャラクターを保ち続ける——クエストを越えて、いつまでも。

自作か、採用か

ひとつのAPIか、継ぎ接ぎのスタックか。

どのチームも見積もる自作構成は同じです。思考にGPT、音声にElevenLabs、記憶にmem0 — そして、それらをひとりのAIキャラクターに見せるための糊。その計算をどうぞ。

< 300ms

最初の音声まで

GPT → ElevenLabs の往復は約1.2〜2秒

1API

3社ではなく

GPT + ElevenLabs + mem0 + 糊を置き換える

0

運用するベクトルストア

記憶はフルマネージド — そのまま動く

GPT + ElevenLabs + mem0

自作スタック
  • 最初の音声までの時間約1.2〜2秒
  • リアルタイム知覚現実的な手段なし
  • 記憶ベクトルストアと検索を自前で運用
  • 接続するベンダー数3社 + 自前の糊コード
  • キャラクターを保つAPI をまたいでプロンプトで継ぎ接ぎ
  • 音声の同意あなた任せ

Mirari

ひとつのAPI
  • 最初の音声までの時間< 300 ms
  • リアルタイム知覚ネイティブ — ゲームが見える
  • 記憶フルマネージド — そのまま動く
  • 接続するベンダー数1
  • キャラクターを保つひとつのモデル、常に
  • 音声の同意Voice ID Registry を標準搭載

Mirari の最初の音声は当社スタックでの実測値です。自作の数値は、ストリーミングのGPTクラス → ElevenLabs → mem0 の往復を代表する値です。詳細な計測方法はご請求ください。

002クイックスタート

3回の呼び出しで動き出す。

REST APIの説明用プレビューです。一般提供までに仕様は変わる可能性があります——キーの発行とともに、最新の仕様をお渡しします。

01

認証する

APIキーを差し込み、ベースURLを指すだけ。すべての呼び出しは、ベアラートークン一つで届きます。

install + auth
C#
// Unity — add the Forerunner UPM package, then:
using Forerunner;
var fr = new ForerunnerClient("fk_live_8f2a…");
bool ok = await fr.HealthAsync();
Debug.Log(ok); // True
02

キャラクターを作成する

名前、ペルソナ、声を与えるだけ。永続的な記憶を備え、話す準備が整った状態で返ってきます。

記憶と声を備えたキャラクターを作成
C#
var rin = await fr.Characters.CreateAsync(new CharacterSpec {
Name = "Rin",
Persona = "Sharp-tongued, loyal, bilingual scout.",
Voice = "mirari:rin",
Memory = MemoryMode.Persistent,
});
Debug.Log(rin.Id); // "char_8f2"
03

メッセージを送る

キャラクターのまま、テキストと音声で返答をストリーミング——その間、記憶は自ら更新されます。これがループのすべてです。

キャラクターのまま、音声付きで返答をストリーミング
C#
// stream a reply, in character, with audio
await foreach (var ev in fr.Characters.Chat("char_8f2", new ChatRequest {
Session = "player_42",
Say = "I'm back.",
})) {
if (ev.Text != null) subtitle.Append(ev.Text);
if (ev.Audio != null) audioSource.Stream(ev.Audio); // ~280ms first byte
}
04

記憶と状態を更新する

たった今起きたこと——裏切り、贈り物、死——を書き込み、ゲームの状態やプレイヤーの事実にパッチを当てる。キャラクターは次のセッションで、促されずともそれを思い出します。

ゲームイベント → 記憶と状態へ
C#
// write what just happened — recalled next session, unprompted
await fr.Characters.RememberAsync("char_8f2", new MemoryEvent {
Event = "Player spared the bandit chief.",
Weight = 0.8f,
Tags = new[] { "mercy", "quest:bandits" },
});
// patch game state + player facts
await fr.Characters.PatchStateAsync("char_8f2", new {
trust = +2,
location = "Riverwood",
knows = new { player_name = "Dovah" },
});

生きた世界

言葉にするだけ。ナレーターが生かし続ける。

アンサンブルをキャスティングし、世界をふつうの言葉で描くだけ。すべてを統べるAI — ナレーター — があなたの言葉から関係性のグラフを組み立て、出来事の進行に合わせてすべての絆を編み直します。配線する関係図も、書き起こす分岐もありません。

describe the world
ts
// Describe the world in plain English — the narrator does the wiring.
const world = await fr.worlds.create({
cast: ["Rin", "Tsuki", "Mochi", "Vex", "Kit", "Sable"],
premise: `Rin trusts Kit, but both are rivals with Vex.
Tsuki mentors Mochi, who owes Sable a life debt.`,
});
// From here an overseeing AI runs the world: it reads each event and
// reshapes every bond, mood, and stake on its own — no graph wiring,
// no branch scripts.
world.on("event", world.narrate);
drag to orbit · hover a character
live

ナレーターがグラフ全体をリアルタイムで動かす — あなたは世界がどんなものかを語るだけ。

FRR // •• · LIVE
プライベートベータ

アーリーアクセスを手に入れる。

スタジオやつくり手の方々を、段階的にオンボーディングしています。あなたが何を作っているのか教えてください。キーをお渡しします。

アクセスをリクエスト

クレジットカード不要。順次ご招待。完全なドキュメントはapi.forerunner.aiで公開予定。