Naia는 "내 컴퓨터에서 내 AI를 소유한다"는 오픈소스 프로젝트 입니다.
거대 기업 클라우드에 대화를 맡기는 대신, 내 모델을 내려받아 내 GPU에서 직접 돌립니다. 이 모델은 Naia OS(쉘) 전용이 아니라, OpenAI 호환 API를 통해 범용으로 쓸 수 있습니다 — OpenAI SDK·도구·앱이면 접속 주소만 바꿔 그대로 붙고, 이 모델 위에서 새 앱을 만들 수도 있습니다. Naia 모델 이용 라이선스는 개인 구독자에게 제공되며(기업·다중 시트는 별도 협의), 구독 인증키를 통해 활성화할 수 있습니다. 구독료는 Naia 오픈소스 프로젝트 개선과 서비스 운용에 쓰입니다.
이 구독 인증키로 컨테이너가 기동하면서 구독 검증 + 이 기기 활성화 + 복호화를 처리합니다(활성 구독만 동작). 유효기간 = 구독 기간, 1 구독 = 1 활성 기기.
첫 기동은 모델 로딩으로 수 분 걸립니다. 준비 확인:
curl -s http://127.0.0.1:8892/health
활성 기기
아직 없음. 위 명령으로 컨테이너가 접속하면 자동으로 활성화됩니다.
재시작 · 일시정지 (같은 기기)
같은 기기에서 잠깐 끄거나 다시 켜려면 아래로 충분합니다 — 인증서가 볼륨에 남아 게이트웨이 없이(오프라인) 같은 기기로 재기동됩니다(재발급·409 불필요). 기기를 바꾸거나 구독을 정리하려는 게 아니면 아래 3번(해제)은 쓰지 마세요.
podman restart naia-omni
첫 기동·재시작은 모델 로딩으로 수 분 걸립니다 — 위 2번의 준비 확인(health)이 ready:true 가 될 때까지 기다리세요. 그 전 연결 실패(거부/1006)는 정상입니다.
3. 해제 및 재설치 (기기 변경)
기기를 바꾸거나 다시 설치하려면 아래 명령을 실행하세요 — ① 컨테이너에서 해제(release): 서버에 보고돼 활성 기기가 풀림 ② 컨테이너 제거 ③ 라이선스 볼륨 제거(release 표식 삭제 = 재설치 준비). 그 뒤 위 2번에서 새 구독 인증키로 다시 발급·구동하면 됩니다.
해제 없이 컨테이너를 삭제하거나 기기를 잃으면 서버의 활성 기기가 풀리지 않아, 구독 기간이 끝날 때까지(만료 시 자동 해제) 새 활성화가 막힙니다. 해제는 활성 기기 슬롯을 풀 뿐이니, 기기 변경을 끝내려면 새 기기에서 위 2번(발급·구동)을 다시 진행하세요.
구동된 컨테이너를 naia-os의 게이트웨이/백엔드 URL로 지정합니다. 베이스 URL만 넣으면 경로(/v1/realtime)와 기본 model이 자동 적용됩니다:
같은 PC: ws://127.0.0.1:8892 — 로컬이라 평문 그대로 OK.
다른 기기(원격): TLS 입구를 거쳐 붙습니다(아래 Tailscale). naia-os는 호스트네임을 주면 보안을 위해 자동으로 암호화(wss) 로 연결하는데, 컨테이너의 8892는 평문(ws) 이라 8892에 TLS로 직접 붙으면 실패합니다(SSL/Websocket 에러). 그래서 원격은 TLS를 앞단에 둔 주소(예: https://<호스트>:8443)를 씁니다.
구독 인증키는 구동(활성화) 시 1회만 쓰입니다(구독 확인·라이선스 발급). 한 번 활성화되면 컨테이너가 라이선스로 로컬 자체검증하므로, naia-os 등 클라이언트는 위 URL로 연결만 하면 됩니다 — 같은 PC면 127.0.0.1(평문), 다른 기기면 아래 Tailscale(TLS). 별도 연결 키는 없습니다.
코드로 직접 쓰려면(OpenAI 호환 chat·TTS·STT·임베딩·realtime API) → 4.5 모델 상세 이용 (개발) 참고.
naia-os 백엔드 URL을 https://<머신이름>.<tailnet>.ts.net:8443 로 (경로·모델 자동). 머신 주소는 tailscale status 로 확인.
이러면 tailscale가 TLS를 받아 평문 8892로 전달하므로 naia-os의 암호화(wss) 연결이 정상 동작합니다. 포트 개방·공인 IP 불필요, 집/외부 어디서나.
⚠️ ws://<tailscale-ip>:8892직결은 naia-os에선 안 됩니다 — naia-os가 호스트네임을 wss(TLS)로 올리는데 8892는 평문이라서요. 위 --https 입구(:8443)를 쓰세요. (평문 ws만 쓰는 자체 코드라면 tailnet IP 직결도 가능.)
다른 원격 솔루션 (대안)
방법
특징
WireGuard
셀프호스트 VPN. Tailscale의 수동 버전(직접 키 교환).
Cloudflare Tunnel (cloudflared)
공인 도메인 + TLS 자동, 포트 개방 불필요.
SSH 터널
ssh -L 8892:127.0.0.1:8892 user@gpu-pc — 1:1, 간단.
같은 LAN
공유기 내부면 ws://<lan-ip>:8892로 바로.
ngrok / frp
임시 공개 터널(시연·테스트용).
wrapper는 평문 ws입니다. 공개망에 노출할 때는 반드시 Tunnel/VPN의 TLS·인증을 앞단에 두세요. Tailscale·WireGuard·SSH는 자체 암호화됩니다.
라이선스 상세
유효기간 = 구독 기간 — 라이선스는 구독 기간 동안 유효합니다. 기간 중엔 오프라인으로 동작하고, 갱신 시에만 인터넷이 필요합니다. 만료되면 컨테이너가 자동으로 종료되니, 계속 쓰려면 갱신 후 재활성화(위 2번)하세요.
1 구독 = 1 활성 기기 — 동시에 활성화되는 기기는 1대이며, 활성 기기가 있는 동안엔 새 구독 인증키를 발급할 수 없습니다(정상은 인증키 1개).
기기 변경 = 해제(위 3번) + 새 기기 재활성화 — 기존 기기 컨테이너에서 해제(release)하면 서버에 자동 반영돼 활성 기기가 풀립니다. 그 뒤 새 기기에서 다시 발급·구동(위 2번)하면 됩니다. 해제만으론 슬롯만 풀립니다.
해제 없이 컨테이너만 삭제하면 활성 기기가 풀리지 않습니다 — podman rm로 컨테이너만 지우거나 기기를 분실하면(해제 보고가 서버에 가지 않으므로) 서버의 활성 기기가 그대로 남아, 구독 기간이 끝날 때까지 새 활성화가 막힙니다(만료 시 자동 해제). 컨테이너를 지우기 전에 반드시 위 3번 해제(release)를 먼저 실행하세요.
자동 연장 해제(웹) — 웹에서 구독 인증키의 만료 자동 연장을 해제하면 즉시 무효가 아니라 갱신이 중단되어, 구독 만료 시점에 활성 기기가 자동으로 풀립니다(만료까지 재발급 불가). 활성 기기를 지금 풀려면 컨테이너 해제(release)를 쓰세요. 인증키가 유출됐을 때만.
개인 구독은 본인 창작물의 수익화(예: 버튜버)에 쓸 수 있습니다. 기업·다중 시트·키오스크·전시·재판매·제품 임베드는 별도 협의입니다.
생성 음성에는 식별 워터마크가 들어갑니다 — 출력 음성에 추적용 식별 신호가 새겨져, 타인 사칭·동의 없는 음성 합성·딥페이크·사기 등으로 악용할 경우 출처를 추적할 수 있습니다. 이런 불법·기만 목적의 사용은 금지되며, 적발 시 구독이 해지되고 법적 책임이 따를 수 있습니다.
대화 모델 바꾸기 (0.91부터)
naia에는 대화를 나누는 AI가 기본으로 들어 있습니다. 0.91부터는 이 대화용 AI를 다른 것으로 바꿀 수 있습니다. 목소리(말하기·듣기)와 구독은 그대로 두고, 대화를 맡는 부분만 갈아 끼우는 셈입니다.
기본 대화 모델은 내장 오픈 LLM입니다. 가볍고 여러 언어를 다룹니다. 다른 것으로 바꿔 봤다가 언제든 기본으로 되돌릴 수 있습니다.
너무 큰 모델은 못 올립니다. 그래픽카드가 24GB라도 말하기·듣기 기능이 늘 10GB쯤 쓰고 있습니다. 그래서 새로 올리는 대화용 AI는 대략 14GB까지가 한계입니다. 이보다 큰 것은 적용되지 않습니다.
잘못돼도 대화는 끊기지 않습니다. 새 모델을 올리다 실패하면 쓰던 모델로 알아서 되돌아갑니다.
개인 구독자는 따로 받을 것이 없습니다. 본인 구독만으로 바꿀 수 있습니다.
직접 바꾸는 구체적 방법은 개발자용 안내에 있습니다. 화면에서 모델을 고르고 누르기만 하면 바뀌도록 만드는 작업을 준비하고 있습니다.
새 버전으로 업데이트 (0.91부터)
새 버전이 나오면 이미지만 새로 받아 다시 켜면 됩니다. 구독·기기 등록·기본 모델·목소리 설정은 그대로 유지되고, 다시 인증할 필요가 없습니다. (새 버전 첫 실행 때 인터넷으로 자동 재인증되니 업데이트 시엔 인터넷 연결 필요.)
# 1) 최신 버전 받기
podman pull ghcr.io/nextain/naia-0.9-omni-24g:latest
# 2) 컨테이너만 정리 (라이선스 볼륨은 그대로 둔다)
podman stop naia-omni && podman rm naia-omni
# 3) 처음 설치할 때 쓴 실행 명령을 그대로 다시 실행
# (같은 라이선스 볼륨을 물리면 구독·기기 인증이 유지됩니다)
특정 버전을 콕 집으려면 :latest 대신 :0.91 처럼 버전을 적습니다. 새 버전에 문제가 있으면 같은 방식으로 이전 버전 태그를 받아 되돌리면 됩니다.
⚠️ 업데이트하려고 "기기 해제"를 누르지 마세요. 기기 해제는 쓰던 컴퓨터를 다른 컴퓨터로 바꿀 때만 쓰는 기능입니다. 업데이트하려다 잘못 누르면 처음부터 다시 인증해야 합니다. 라이선스 볼륨만 그대로 두면 해제 없이 업데이트됩니다.
향후 모델
naia-0.9-coding-24g (24GB, 코딩·에이전트) — 예정
naia-0.9-omni-48g (48GB, 더 큰 옴니) — 예정
Naia-OS 번들 확장기능 — naia-os 앱에 바로 얹는 오프라인 확장으로 개발 예정. 내 GPU를 자동 감지해 맞는 모델(tier)을 골라 받고 설치까지 한 번에 (명령줄 없이).