채팅, 비전, 이미지, 음성 및 임베딩을 위한 단일 로컬 API (온디바이스, 2026)
요약
Off Grid AI Desktop은 Mac과 PC에서 채팅, 비전, 음성 등 다양한 AI 모델을 로컬에서 실행하고 OpenAI API 규격의 단일 HTTP API로 제공하는 오픈 소스 앱입니다. 인터넷 연결 없이 온디바이스로 작동하여 보안성이 높으며, 기존 OpenAI SDK를 그대로 활용할 수 있습니다.
핵심 포인트
- OpenAI API 형식을 지원하여 기존 코드 수정 최소화
- 채팅, 비전, 음성, 이미지 생성 등 6가지 모달리티 지원
- 로컬 루프백 바인딩으로 데이터 유출 없는 높은 보안성
- GGUF 양자화 모델을 사용하여 소비자용 하드웨어 최적화
- Apple Silicon 및 NVIDIA GPU 가속 지원
현대의 노트북은 채팅 모델, 비전 모델, 확산 모델(diffusion model), 그리고 Whisper 전사 모델을 실행할 수 있는 GPU와 통합 메모리(unified memory)를 갖추고 있습니다. 하지만 여러분이 데이터를 전송하며 인터넷을 통해 타인의 서버에 있는 동일한 모델들을 호출하기 위해 매달 비용을 지불하는 동안, 그 실리콘(silicon) 자산의 대부분은 유휴 상태로 머물러 있습니다. Off Grid AI Desktop은 이러한 모든 모델을 Mac 또는 PC에서 직접 실행하고, 이를 하나의 로컬 HTTP API를 통해 노출하는 무료 오픈 소스 앱입니다.
무료, 오픈 소스 (AGPL-3.0), 오프라인 실행.
요약 버전
Off Grid AI Desktop은 http://127.0.0.1:7878/v1에서 로컬 서버를 제공합니다. 이 서버는 OpenAI API 형식을 따릅니다. 하나의 베이스 URL(base URL)이 채팅(chat), 비전(vision), 임베딩(embeddings), 음성-텍스트 변환(speech-to-text), 텍스트-음성 변환(text-to-speech), 그리고 이미지 생성(image generation)의 6가지 모달리티(modalities)를 지원합니다. 루프백(loopback)에만 바인딩되므로 인터넷에 절대 노출되지 않습니다. API 키도, 계정도, 클라우드 경유도 없습니다. 어떤 OpenAI SDK든 베이스 URL을 지정하기만 하면 기존 코드가 그대로 작동합니다.
이것이 핵심 제안입니다. 이 포스트의 나머지 내용은 여러분이 바로 복사해서 실행할 수 있도록 각 모달리티별 호출 예시를 제공합니다.
필요한 사항
이 앱은 추론 엔진(inference engines)을 번들로 포함하고 있으므로, 모델을 실행할 하드웨어만 있으면 됩니다.
| 등급 | Mac | Windows | RAM/VRAM | 디스크 공간 |
|---|---|---|---|---|
| 최소 사양 | Apple Silicon M1 | NVIDIA GPU 또는 최신 CPU | 16 GB | 20 GB 여유 공간 |
| 권장 사양 | M3 / M4 | 8 GB+ VRAM을 갖춘 RTX | 32 GB | 40 GB+ 여유 공간 |
모델은 양자화된(quantized) GGUF 형식이므로 소비자용 메모리에 적합합니다. Mac에서는 통합 메모리를 통한 Metal 가속을 사용할 수 있습니다. Windows에서는 CUDA 또는 Vulkan을 사용할 수 있으며, CPU 폴백(fallback) 기능도 제공됩니다.
단일 엔드포인트가 중요한 이유
여러분은 이미 OpenAI 클라이언트를 알고 있습니다. 베이스 URL과 키를 설정하고, chat.completions.create를 호출한 뒤 응답을 파싱하면 됩니다. Off Grid AI Desktop은 이 계약(contract)을 유지하면서 요청이 전송되는 위치만 변경합니다. 여러분의 코드는 데이터 센터로 바이트를 보내는 것을 중단합니다. 기계 외부로 나가는 것은 아무것도 없습니다.
즉, 클라우드를 대상으로 작성한 스크립트를 단 한 줄의 수정으로 다시 지정할 수 있다는 의미입니다:
from openai import OpenAI
client = OpenAI(
...
api_key는 무시됩니다. SDK가 오류를 발생시키지 않도록 하기 위해 존재할 뿐입니다. 이제 동일한 client 객체가 아래의 모든 모달리티 (Modality)를 처리합니다.
채팅 (Chat)
표준 채팅 완성 (Chat completions) 기능입니다. 로컬 모델이 요청을 실행하고 텍스트를 스트리밍하거나 반환합니다.
curl http://127.0.0.1:7878/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
...
평소와 같이 choices[0].message.content를 받게 됩니다. 단일 응답의 경우 스트리밍 플래그 (Streaming flag)가 필요하지 않습니다. 토큰이 도착하는 대로 받고 싶을 때는 "stream": true로 설정하세요.
비전 (Vision)
동일한 채팅 엔드포인트 (Endpoint)에서 이미지를 처리할 수 있습니다. image_url을 데이터 URL (Data URL), http URL 또는 로컬 file 경로로 전달하세요. 활성화된 비전 모델이 픽셀을 읽고 답변합니다.
curl http://127.0.0.1:7878/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
...
file:// 경로는 디스크에 머물며 어디로도 업로드되지 않습니다. 모델이 로드되어 이미지를 읽고, 작업이 완료되면 메모리에서 해제됩니다.
임베딩 (Embeddings)
검색 및 RAG (Retrieval-Augmented Generation)를 위한 벡터 임베딩 (Vector embeddings)이며, all-MiniLM-L6-v2에 의해 제공됩니다.
curl http://127.0.0.1:7878/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"input": "local-first inference"}'
부동 소수점 배열인 data[0].embedding을 받게 됩니다. 이를 사용 중인 어떤 벡터 스토어 (Vector store)에든 입력하세요. 단 한 줄의 문서도 기기 외부로 보내지 않고 개인 문서를 인덱싱 (Indexing)할 수 있습니다.
음성-텍스트 변환 (Speech to text)
전사 (Transcription) 작업은 Whisper를 실행하며 다국어를 처리합니다. 오디오 파일을 멀티파트 폼 데이터 (Multipart form data)로 전송하세요.
curl http://127.0.0.1:7878/v1/audio/transcriptions \
-F file=@meeting.m4a
응답에는 전사된 text가 포함됩니다. 녹음된 통화, 음성 메모, 인터뷰 등 무엇이든 녹음 파일이 있는 기기 내에서 텍스트로 변환됩니다.
텍스트-음성 변환 (Text to speech)
역방향 과정은 Kokoro를 사용하며 WAV 파일을 반환합니다. 먼저 사용 가능한 목소리 목록을 확인한 다음 합성하세요.
curl http://127.0.0.1:7878/v1/audio/voices
curl http://127.0.0.1:7878/v1/audio/speech \
...
이제 로컬에서 생성된 WAV 파일이 디스크에 저장되었습니다. 이를 알림, 읽기 모드 기능 또는 접근성 흐름 (accessibility flow)으로 전달(Pipe)하여 사용할 수 있습니다.
텍스트 투 이미지 (Text to image) 및 이미지 투 이미지 (Image to image)
이미지 생성에는 로컬 확산 엔진 (diffusion engine)을 사용합니다. 텍스트 투 이미지 (Text to image)는 단 한 번의 POST 요청으로 가능합니다.
curl http://127.0.0.1:7878/v1/images/generations \
-H "Content-Type: application/json" \
-d '{"prompt": "a terminal-green wireframe of a city at night"}'
이미지 투 이미지 (Image to image)의 경우, 소스 이미지를 multipart 형식으로 edits 엔드포인트에 보내거나 인라인으로 참조하십시오.
curl http://127.0.0.1:7878/v1/images/edits \
-F image=@source.png \
-F prompt="repaint in cinematic lighting"
픽셀은 사용자의 GPU에서 렌더링됩니다. 프롬프트나 출력물 중 그 어떤 것도 원격 서비스에 닿지 않습니다.
모델이 메모리를 공유하는 방식
이 앱은 모든 모델을 한꺼번에 RAM에 유지하지 않습니다. 각 모달리티 (modality)는 필요할 때 로드되며, 요청이 끝나면 언로드 (offload)됩니다. 채팅 모델과 확산 모델 (diffusion model)은 절대 동시에 상주하지 않으므로, 16 GB 사양의 기기에서도 스래싱 (thrashing) 없이 한 번에 하나씩 6가지 모달리티를 모두 처리할 수 있습니다.
이는 콜드 콜 (cold call, 초기 호출) 시 약간의 로드 비용을 지불하는 대신, 실제 하드웨어에 적합한 메모리 점유율 (memory footprint)을 확보하는 트레이드오프 (trade-off)입니다. 동일한 모달리티를 반복해서 호출하면 해당 모델은 웜 (warm) 상태로 유지됩니다.
이미지 생성과 같이 오래 걸리는 작업의 경우, ?async=true 파라미터나 Prefer: respond-async 헤더를 사용하여 비동기 (async) 방식을 선택하십시오. 그러면 202 Accepted 응답과 함께 poll_url을 받게 됩니다. 작업이 완료될 때까지 GET /v1/requests/{id}를 통해 폴링 (poll)하십시오.
curl "http://127.0.0.1:7878/v1/images/generations?async=true" \
-H "Content-Type: application/json" \
-d '{"prompt": "a quiet harbor at dawn"}'
...
개인정보 보호: 호스팅된 API보다 강력함
호스팅된 멀티모달 (multimodal) API는 사용자가 보내는 모든 프롬프트, 모든 이미지, 모든 오디오 파일을 확인합니다. 또한 요청을 로그로 남깁니다. 이를 사용하려면 사용자의 신원과 연결된 계정과 키가 필요합니다. Off Grid AI Desktop은 127.0.0.1에 바인딩되어 있으므로, 서버는 오직 사용자의 기기에만 응답합니다. 텔레메트리 (telemetry)는 없습니다. 계정도 필요 없습니다. 코드는 AGPL-3.0 라이선스이므로 코드가 정확히 무엇을 하는지 직접 읽어볼 수 있습니다. 사용자의 스크린샷, 녹음 및 문서는 원래 있던 곳에 그대로 머뭅니다.
시작하기
- github.com/off-grid-ai/desktop에서 다운로드하거나 클론(clone)하세요.
- 앱을 설치하고 실행합니다.
- 내장된 브라우저에서 원하는 각 모달리티 (modality)별 모델을 선택하여 다운로드합니다.
- 게이트웨이 (gateway)는
http://127.0.0.1:7878/v1에서 활성화됩니다. 대화형 문서(interactive docs)를 보려면/docs를, 전체 사양(spec)을 보려면/openapi.json을 여세요. - OpenAI SDK의 베이스 URL (base URL)을 해당 주소로 지정하고 위의 모든 모달리티를 호출하세요.
GET /v1/models를 언제든 실행하여 각 모달리티별로 어떤 모델이 활성화되어 있는지 확인할 수 있으며, 종류(kind)별로 태그가 지정됩니다: 채팅 (chat), 비전 (vision), 이미지 (image), 음성 (speech), 전사 (transcription).
향후 계획
- 로컬 메시 (local mesh)를 통해 연결된 다른 기기에서 게이트웨이를 사용할 수 있습니다. 즉, 휴대폰이나 태블릿이 가정 내의 개인용 추론 백엔드 (inference backend)로서 데스크톱을 호출할 수 있게 됩니다. 클라우드 없이 로컬에서만 작동합니다.
- 더 많은 모달리티에 걸친 번들 모델 (bundled models) 제공.
- 사양 (spec)이 확장됨에 따라 더 넓은 OpenAI 인터페이스 (surface) 커버리지 지원.
FAQ
Q: 정말 무료인가요?
네. 이 앱은 AGPL-3.0 라이선스 하에 무료이며 오픈 소스입니다. 게이트웨이 사용을 제한하는 유료 티어 (paid tier)는 없습니다.
Q: 오프라인에서도 작동하나요?
네. 모델이 다운로드되면 모든 호출은 네트워크 없이 온디바이스 (on-device)에서 실행됩니다.
Q: API 키가 필요한가요?
아니요. 엔드포인트 (endpoint)는 아무것도 확인하지 않습니다. SDK는 키 (key) 필드를 요구하므로, 아무 자리 표시자 (placeholder) 문자열이나 전달하면 됩니다.
Q: 기존의 OpenAI 코드가 작동할까요?
공식 openai-python 또는 openai-node SDK를 사용한다면, base_url을 http://127.0.0.1:7878/v1로 설정하세요. 그러면 채팅 (chat), 비전 (vision), 임베딩 (embeddings), 오디오 (audio), 이미지 (images) 모두 작동합니다.
Q: 네트워크상의 다른 앱이 접근할 수 있나요?
아니요. 서버는 루프백 (loopback)에만 바인딩 (bind)됩니다. 오직 귀하의 머신에만 응답합니다. 로컬 메시를 통한 기기 간 접근은 별도의 향후 기능입니다.
Q: RAM이 얼마나 필요한가요?
16 GB 환경에서는 모달리티를 한 번에 하나씩 실행할 수 있습니다. 32 GB를 사용하면 더 많은 여유 공간을 확보하고 더 빠른 웜 콜 (warm calls)이 가능합니다.
자신의 머신에서 실행할 수 있는 모델에 대한 접근 권한을 더 이상 빌려 쓰지 마세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기