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

당신의 세계 속에서

게임 속에 살아가는 캐릭터.

당신의 세계에 하나 데려오면 플레이어를 기억하고, 자기만의 목소리로 대답하며, 캐릭터를 유지합니다 — 퀘스트를 거듭해도 변함없이.

직접 구축 vs 도입

하나의 API, 아니면 직접 엮어야 할 스택.

어느 팀이든 똑같은 DIY 구축을 견적 냅니다. 두뇌는 GPT, 음성은 ElevenLabs, 메모리는 mem0 — 게다가 이 모두를 하나의 캐릭터처럼 느껴지게 묶는 접착 코드까지. 계산해 보면 이렇습니다.

< 300ms

첫 음성까지

GPT → ElevenLabs 왕복은 ~1.2–2 s

1API

세 개의 공급사가 아닌

GPT + ElevenLabs + mem0 + 접착 코드를 대체

0

운영할 벡터 스토어

메모리는 관리형 — 그냥 작동합니다

GPT + ElevenLabs + mem0

DIY 스택
  • 첫 음성까지 시간~1.2–2 s
  • 실시간 인지현실적인 방법 없음
  • 메모리벡터 스토어 + 검색을 직접 운영
  • 연결할 공급사3 + 직접 작성한 접착 코드
  • 캐릭터 유지여러 API에 걸쳐 프롬프트로 봉합
  • 음성 동의직접 책임

Mirari

하나의 API
  • 첫 음성까지 시간< 300 ms
  • 실시간 인지네이티브 — 게임을 봅니다
  • 메모리관리형 — 그냥 작동
  • 연결할 공급사1
  • 캐릭터 유지하나의 모델, 언제나
  • 음성 동의Voice ID Registry 기본 내장

Mirari 첫 음성은 자사 스택에서 측정했으며, DIY 수치는 스트리밍 GPT급 → ElevenLabs → mem0 왕복을 대표하는 값입니다. 전체 방법론은 요청 시 제공합니다.

002퀵스타트

세 번의 호출로 작동시키기.

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에서 제공됩니다.