“90프레임을 약 1초에 렌더링한다”는 문장은 눈에 잘 들어옵니다. 하지만 raea 0.1.0에서 더 중요한 변화는 속도 자체가 아닙니다. 영상 장면을 React 컴포넌트로 쓰고, 그 장면을 MP4로 굽는 동시에 게임처럼 실시간 재생하고, 특정 프레임을 PNG로 꺼내 에이전트가 직접 검사할 수 있다는 구조입니다. 생성형 영상 도구가 “프롬프트에서 결과물”로 끝나는 것과 다른 지점입니다.

raea 0.1.0 릴리스는 2026년 11월 9일 16:11 UTC에 공개됐습니다. 저장소는 스스로를 canary라고 부릅니다. “매일 바뀐다”는 경고가 붙어 있고, Windows는 가장 최근에 추가돼 가장 덜 시험됐습니다. 이 글은 공개된 문서와 저장소를 읽은 분석이며, 설치나 렌더링 실행은 하지 않았습니다.

한 엔진, 두 출력

raea의 기본 단위는 컴포지션입니다. React 컴포넌트가 주어진 시점의 프레임을 그립니다. useCurrentFrame()으로 시간을 읽고, interpolate()로 값을 보간하고, Composition에 해상도·fps·프레임 수를 적습니다. README의 Hello 예제는 1920×1080, 30fps, 90프레임짜리 장면을 raea render hello.tsx -o hello.mp4 한 줄로 렌더링합니다.

raea 0.1.0의 렌더링 경로. React/TypeScript 컴포지션이 V8에서 실행되고, Blitz 오버레이와 Bevy 3D, K GPU 합성기를 거쳐 NV12와 VideoToolbox로 이어집니다. 같은 컴포지션이 실시간 재생과 프레임 검사에도 쓰입니다.
그림 1. 하나의 컴포지션이 렌더링·실시간 재생·프레임 검사로 갈라지는 경로. 수치는 raea 문서의 2026년 10월 18일 측정값이다.

구조를 계층으로 보면 이렇습니다. 컴포지션은 V8에서 실행됩니다. macOS에서는 JavaScriptCore, 그 밖의 플랫폼에서는 QuickJS를 씁니다. raea/ecs는 Bevy의 World를 그대로 노출합니다. HTML과 CSS 인터페이스는 Blitz가 Rust로 레이아웃하고 그립니다. 비디오 클립은 K 커널이 GPU에서 디코드·합성하며, UI 아래, 3D 장면 위에 놓입니다. 완성된 프레임은 GPU에서 NV12로 변환되고 VideoToolbox가 하드웨어 인코딩합니다.

이 경로가 흥미로운 이유는 렌더링과 재생이 같은 엔진을 공유한다는 점입니다. raea render는 오프라인으로 프레임을 굽고, raea play는 같은 컴포지션을 게임처럼 실행합니다. 게임은 useGameState(initial, step)로 상태를 순수 폴드로 표현합니다. 실시간 플레이에서는 키 입력이, 렌더링에서는 녹화된 입력 로그가 step에 들어갑니다. raea의 replay gate는 두 경로가 같은 픽셀을 내는지 SSIM 0.999 이상으로 확인합니다. 게임 gate는 120fps, 입력 지연 2프레임 이내, 메모리 400MB 미만을 요구합니다.

import { AbsoluteFill, Composition, interpolate, registerRoot, useCurrentFrame } from "raea";

function Hello() {
  const f = useCurrentFrame();
  return (
    <AbsoluteFill style={{ background: "#000", color: "#fff", fontSize: 120, opacity: interpolate(f, [0, 20], [0, 1]) }}>
      Hello
    </AbsoluteFill>
  );
}

registerRoot(() => <Composition id="hello" component={Hello} width={1920} height={1080} fps={30} durationInFrames={90} />);

이 코드는 README의 예제를 그대로 옮긴 것입니다. 여기서 눈여겨볼 점은 “영상 편집”이 아니라 “시간에 대한 함수”를 작성한다는 것입니다. 장면의 각 요소가 어느 프레임에 그려지는지 엔진이 알 수 있기 때문에, 캡션 하나를 고치면 그 캡션이 등장하는 프레임만 다시 계산할 수 있습니다. 문서는 이를 증분 베이크라고 설명합니다. 타임라인이 데이터이기 때문에 가능한 최적화입니다.

측정값이 말하는 것

공개된 측정은 두 가지입니다. 2026년 10월 18일, M5 Pro에서 1920×1080, H.264, VideoToolbox 인코딩 기준입니다.

장면 프레임 수 프레임당 시간 비고
Pong, 녹화된 플레이 4,668 5.3ms 120fps 재생은 8.3ms/프레임
Ledge 플랫포머, 5분 36,000 4.4ms 1920×1080

Pong은 재생 속도보다 1.6배 빠르게 렌더링됩니다. 90프레임이 약 1초 걸린다는 README의 표현도 이 계열의 2D·게임 장면에서 나온 숫자입니다. 이 수치를 모든 영상 작업의 일반적인 속도로 확장하면 안 됩니다. 4K, 복잡한 3D, 무거운 필터, 다수의 비디오 레이어가 들어가면 병목은 달라집니다. 측정표에 적힌 조건과 장면을 함께 읽어야 합니다.

또 하나의 한계는 이 수치가 개발자 제공이라는 점입니다. CodeBridge는 저장소와 문서를 검토했지만 raea를 설치해 같은 장면을 다시 렌더링하지 않았습니다. 독립 벤치마크가 없는 상태에서 “1.6배”는 특정 장면의 공개 측정값으로 취급하는 것이 안전합니다.

에이전트가 영상을 검사하는 루프

raea가 에이전트 친화적이라고 주장하는 근거는 “AI가 코드를 쓴다”가 아닙니다. 렌더링 결과가 검사 가능한 데이터로 남는다는 점입니다. raea render --frame 45 -o frame.png는 특정 프레임을 이미지로 꺼냅니다. 에이전트는 그 이미지를 보고 잘린 텍스트, 낮은 대비, 안전 영역 침범을 확인할 수 있습니다. raea check는 이런 문제를 자동으로 잡는 별도 명령입니다.

이 루프는 영상 생성 모델의 루프와 다릅니다. 확산 모델은 프롬프트를 바꿔 다시 생성하는 것이 기본이고, 결과의 어느 프레임이 왜 잘못됐는지 설명하기 어렵습니다. raea는 장면 그래프와 타임라인을 가지고 있으므로 “이 프레임의 이 요소가 이렇게 그려졌다”는 사실을 확인할 수 있습니다. 에이전트가 수정할 대상도 프롬프트 전체가 아니라 컴포넌트, 스타일, 타이밍이 됩니다.

실무에서는 세 가지 용도가 먼저 떠오릅니다. 첫째, 제품 설명 영상이나 모션 그래픽처럼 정확한 텍스트와 레이아웃이 중요한 작업입니다. 둘째, 게임 프로토타입과 리플레이 검증입니다. 셋째, 에이전트가 만든 장면을 사람이 보기 전에 프레임 단위로 검사하는 QA 파이프라인입니다. 반대로 실제 촬영 영상의 색 보정, 다중 트랙 편집, 고급 합성처럼 전통적인 NLE의 기능 깊이가 필요한 작업은 아직 경계 밖입니다.

1.6배라는 숫자의 경계

raea 0.1.0은 canary입니다. 저장소는 “깨지는 변경, 거친 부분, 문서의 빈틈”을 전제하라고 말합니다. Windows 지원은 가장 최근에 추가됐고 가장 덜 시험됐습니다. 프로덕션 파이프라인에 넣는다면 버전을 고정하고, 렌더링 결과의 해시와 프레임 검사를 회귀 테스트로 남기는 편이 안전합니다.

라이선스도 확인해야 합니다. raea는 FSL-1.1-ALv2입니다. 사용·수정·재배포는 가능하지만 raea와 경쟁하는 제품을 만드는 데는 쓸 수 없습니다. 각 버전은 릴리스 2년 후 Apache-2.0으로 바뀝니다. “오픈소스”라는 표현만 보고 도입하면 이 제한을 놓칠 수 있습니다.

또한 이 엔진은 영상 생성 모델을 대체하지 않습니다. 카메라로 찍은 영상, 생성형 모델로 만든 클립, 3D 자산을 조합해 최종 장면을 구성하는 도구입니다. “프롬프트로 영상”을 기대하면 raea의 강점이 아니라 한계가 먼저 보입니다. raea의 강점은 장면을 코드로 통제하고, 같은 장면을 여러 출력으로 검증하는 데 있습니다.

인사이트: 생성에서 검사 가능한 렌더링으로

AI 영상 도구의 경쟁은 “더 그럴듯한 클립을 얼마나 빨리 만드는가”에서 “장면을 얼마나 정확히 통제하고 검증하는가”로 넓어지고 있습니다. raea 0.1.0은 그 방향의 초기 사례입니다. React와 TypeScript라는 익숙한 표면, V8과 Bevy라는 실행 구조, Blitz와 K라는 렌더링 계층, VideoToolbox라는 인코딩 경로가 한 줄로 이어집니다.

아직은 canary이고, 측정값도 제한적이며, 라이선스도 제약이 있습니다. 그래도 “영상이 데이터로 남는다”는 성질은 에이전트 시대의 편집 도구가 가져야 할 중요한 계약입니다. 다음에 이 엔진을 평가한다면 렌더링 속도보다 먼저 물어야 할 질문은 이것입니다. 이 장면의 어느 프레임이 왜 그렇게 그려졌는지, 에이전트와 사람이 같은 데이터를 보고 확인할 수 있는가.

비슷한 문제를 임베딩 클러스터링의 갱신 규칙에서 다룬 글로 e-means를, 로컬 모델의 품질·메모리 경계를 다룬 글로 Nota AI의 1.58비트를 이어서 읽을 수 있습니다.