AI 기능
TongFlow의 변환은 이름을 명시한 소수의 백엔드 모델 위에서 돌아갑니다 — “수천 개의 모델”이라는 모호한 약속이 아닙니다. 실제 목록과 각 모델이 쓰이는 곳, 접근 설정 방법을 정리했습니다.
백엔드 모델 (Modal에서 실행)
이 모델들은 Modal 워커 컨테이너 안에서 실행됩니다. MODAL_TOKEN_ID와 MODAL_TOKEN_SECRET을 설정하면 런타임이 Modal을 통해 호출합니다:
| 모델 | 용도 | 노드 |
|---|---|---|
| Z-Image | 텍스트 → 이미지 | image-gen-text, image-gen |
| FLUX.2 Klein 9B | 다중 레퍼런스 융합, 이미지 편집 | image-fusion, image-edit |
| LTX-2 | 텍스트/이미지 → 영상, 토킹 헤드 | text-gen-video, image-gen-video, image-image-gen-video, audio-image-gen-video |
| SeedVR2 | 이미지·영상 초해상도 | image-upscale, video-upscale |
| Gemma 4 | 멀티모달 이해(이미지 / 영상) | image-describe, video-describe, video-gen-text |
| Qwen3 | 음성 인식과 음성 합성 | transcribe, transcribe-timestamp, text-gen-speech-preset, text-gen-speech-clone, text-gen-speech-instruct, convert_voice |
| ACE-Step | 텍스트 → 음악 | gen-music |
애니메이션 / 캐릭터 교체 / 모션 전이(wan-animate-mix, video-image-move-animal, video-image-gen-video-mix)에는 WAN-Animate 변형을 사용합니다 — 정확한 슬롯 배선은 ABI를 참고하세요.
로컬 미디어 처리
일부 작업에는 모델이 필요 없습니다 — 미디어 도구만 있으면 됩니다. Modal 워커에서 실행되긴 하지만, 학습된 모델을 전혀 호출하지 않는다는 의미에서 “로컬”입니다:
- FFmpeg — 트랜스코딩, 먹싱, 디먹싱, 프레임 추출(
merge-video-audio,separate-video-audio,extract-audio,get-first-frame,get-last-frame) - 장면 감지 —
split-video를 위한 샷 경계 감지 - 자막 / 워터마크 제거 — 전용 워커가 처리(
subtitle_remove,remove_watermark)
LLM 제공자 (텍스트 생성·라우팅용)
텍스트 생성(gen-text, combine-text 그룹화)은 네 곳의 LLM 제공자 중 하나를 거칩니다. 환경 변수로 어느 곳을 쓸지 정합니다:
| 제공자 | 환경 변수 | 비고 |
|---|---|---|
| OpenRouter | OPENROUTER_API_KEY | gen-text의 기본값. 무료 라우팅 티어가 있습니다. 특정 라우트를 고정하려면 OPENROUTER_FREE_MODEL을 추가로 설정합니다. |
| Google Gemini | GEMINI_API_KEY 또는 GOOGLE_API_KEY | 노드의 모델 슬롯이 Gemini 계열일 때 사용됩니다. 일부 멀티모달 핸들러도 여기에 의존합니다. |
| OpenAI | OPENAI_API_KEY | 노드의 모델 슬롯이 OpenAI일 때 사용됩니다. 기본 채팅 모델은 gpt-4o-mini입니다(OPENAI_CHAT_MODEL로 변경 가능). |
| DeepSeek | DEEPSEEK_API_KEY | 몇몇 특정 코드 경로(예: 배치 텍스트 그룹화)에서만 사용됩니다. 메인 gen-text 드롭다운에는 없습니다. |
실제로 쓸 제공자만 설정하면 됩니다. 다만 최소 하나는 필요합니다 — LLM 키가 하나도 없으면 스튜디오는 텍스트 생성 변환을 실행하지 않습니다.
변환 호출의 흐름
image-gen-text(“Z-Image로 텍스트 → 이미지”) 노드를 예로 들면:
- 캔버스가 노드의 입력(업스트림 텍스트 노드의 출력)을 워크플로 익스포터에 넘깁니다.
- 익스포터가 Next.js 작업 API를 호출합니다:
POST /api/task/create, 본문은{feature: "image-gen-text", pluginId, prompt: {text}, nodeId}. - 서버가 Z-Image 워커로 가는 Modal 호출을 큐에 넣고 입력 프롬프트를 전달합니다.
- 워커가 이미지를 생성해 base64로 반환하면, 서버가 이를
data/uploads/에 저장된 파일 참조(file_key)로 후처리합니다. - 캔버스의 이미지 노드가 결과로 업데이트됩니다.
모든 변환이 같은 호출 패턴을 따릅니다 — 슬롯 이름과 입력 형태만 다릅니다.
Modal 비용 참고
- Modal은 월 $30의 무료 크레딧을 제공합니다. 대부분의 TongFlow 워크플로에는 충분한 양입니다.
- 이미지 생성과 TTS는 저렴합니다. 영상 생성(특히 긴 클립)과 4K 업스케일은 비쌉니다 — Modal 사용량 대시보드에서 크레딧이 줄어드는 것이 눈에 띌 것입니다.
- 확실한 상한이 필요하면 Modal 설정에서 지출 한도를 걸어 두세요.
LLM 비용 참고
- OpenRouter 무료 티어면 가벼운 텍스트 생성은 충분합니다.
- 사용량이 많다면 유료 OpenRouter 라우트, Gemini, OpenAI Mini가 보통 호출당 몇 센트 수준입니다.
- DeepSeek은 저렴하지만 기본값이 아닙니다. 꼭 필요할 때만 켜세요.
모델 목록 확장하기
새 모델(직접 만든 LoRA, 다른 업스케일러, 오픈소스 TTS)을 연결하고 싶다면 tongflow 저장소의 docs/feature-registry.md를 참고하세요. 순서는 다음과 같습니다:
config/tongflow.abi.json에 타입 지정 입력·출력을 갖춘 새 슬롯을 정의합니다.pnpm gen:abi로 TS 타입을 재생성합니다.- Python SDK(
@node_slot데코레이터 + Pydantic 모델)로plugins/아래에 슬롯을 구현합니다. pnpm tongflow:publish로 새 SDK 버전을 게시한 뒤, 플러그인을 Modal에 배포합니다.
