AI 학습 허브

로컬 AI 모듈 목차

Air-Gapped Engineering Standard
Module 03

멀티미디어 생성 서브시스템 (오디오 & 비주얼 허브)

CPU 단독 구동(VRAM 0MB) 음성 STT/TTS 파이프라인 및 RTX 3060 12GB 환경 ComfyUI FLUX GGUF 이미지 & LTX-Video 동영상 생성

1. 오디오 엔진: CPU 전용 음성 인식(STT) & 초고속 합성(TTS)

GPU VRAM을 1MB도 사용하지 않고 64GB 시스템 RAM과 멀티코어 CPU만을 활용하여 1시간 강의를 1분 내 전사하고 0.1초 만에 네이티브 음성을 합성합니다.

Kokoro-82M ONNX TTS (초고속 음성 합성)

  • 연산 자원: CPU 단독 연산 (합성 속도: 실시간 대비 10배 이상 고속, VRAM 점유 0MB).
  • 바이너리 호환: NumPy 바이너리 규격인 voices.bin 채택으로 json 로드 시 발생하는 피클링(Pickle) 에러 원천 차단.
  • 보이스 프리셋: af_bella (기본 여성 음성), af_sarah 등 고품질 네이티브 보이스 내장.

Faster-Whisper large-v3-turbo (고성능 음성 인식)

  • 연산 자원: CPU 8개 멀티스레드 분산 할당 (cpu_threads=8).
  • 양자화 정밀도: int8 양자화 구동으로 시스템 RAM 약 3.5GB만 점유.
  • 무검열 전사: 단어 필터링 없이 고난이도 리눅스 명령어, 네트워크 프로토콜 명칭을 100% 원문 그대로 전사.

오디오 바이너리 가중치 다운로드 (PowerShell)

Set-Location "C:\ai_workspace"
Invoke-WebRequest -Uri "https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files/kokoro-v0_19.onnx" -OutFile "C:\ai_workspace\kokoro-v0_19.onnx"
Invoke-WebRequest -Uri "https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files/voices.bin" -OutFile "C:\ai_workspace\voices.bin"

오디오 통합 실행 스크립트 (C:\ai_workspace\audio_engine.py)

import os
import soundfile as sf
from faster_whisper import WhisperModel
from kokoro_onnx import Kokoro

def text_to_speech(text: str, output_wav: str = "output.wav", voice: str = "af_bella"):
    print("[*] Kokoro TTS 엔진 로드 중 (CPU 구동)...")
    kokoro = Kokoro("C:/ai_workspace/kokoro-v0_19.onnx", "C:/ai_workspace/voices.bin")
    available_voices = kokoro.get_voices()
    if voice not in available_voices:
        voice = available_voices[0]
    print(f"[*] 선택 음성: '{voice}' (총 {len(available_voices)}종 지원)")
    samples, sample_rate = kokoro.create(text, voice=voice, speed=1.0, lang="en-us")
    sf.write(output_wav, samples, sample_rate)
    print(f"[+] 음성 파일 저장 완료: {output_wav}")

def transcribe_audio(audio_path: str) -> str:
    print(f"\n[*] Faster-Whisper 전사 중 (CPU 8스레드 할당): {audio_path}")
    model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8", cpu_threads=8)
    segments, _ = model.transcribe(audio_path, beam_size=5)
    full_text = " ".join([segment.text for segment in segments])
    return full_text.strip()

if __name__ == "__main__":
    test_wav = r"C:\ai_workspace\test_audio.wav"
    sample_text = "Local AI multimedia audio subsystem is operational without GPU memory allocation."
    text_to_speech(sample_text, test_wav, voice="af_bella")
    result_text = transcribe_audio(test_wav)
    print(f"\n=== STT 전사 결과 ===\n{result_text}")
# 가상환경 활성화 상태에서 실행
python C:\ai_workspace\audio_engine.py

2. 비주얼 허브: ComfyUI 포터블 구성 및 내장 환경 패치

12GB VRAM 제약을 극복하기 위해 ComfyUI의 동적 메모리 페이징(Dynamic Staging)을 활용하며, 내장 파이썬 환경의 필수 패키지 버전을 정확히 패치합니다.

[1] 커스텀 노드 클론 (ComfyUI-Manager, GGUF, LTX-Video)

Set-Location "C:\ComfyUI_windows_portable\ComfyUI\custom_nodes"
git clone https://github.com/ltdrdata/ComfyUI-Manager.git
git clone https://github.com/city96/ComfyUI-GGUF.git
git clone https://github.com/Lightricks/ComfyUI-LTXVideo.git

[2] ComfyUI 내장 파이썬 필수 패치 (gguf 누락 및 kornia 버전 충돌 방지)

⚠️ 포터블 전용 파이썬 환경 패치 필수

ComfyUI는 전역 파이썬이나 가상환경(ai_env)이 아닌 자체 python_embeded를 사용합니다. ComfyUI-GGUF 노드 검색을 위한 gguf 라이브러리와 ComfyUI-LTXVideo의 pad 함수 임포트 실패를 방지하는 kornia==0.8.2를 반드시 설치해야 합니다.

Set-Location "C:\ComfyUI_windows_portable"
.\python_embeded\python.exe -m pip install gguf
.\python_embeded\python.exe -m pip install "kornia==0.8.2"

[3] 검증 완료: 정품 가중치 다운로드 배치표

모델 종류 실제 파일명 저장 경로 용량 검증된 다이렉트 직링크
FLUX VAE ae.safetensors ComfyUI\models\vae\ ~335MB camenduru/FLUX.1-dev (공개 미러)
CLIP-L clip_l.safetensors ComfyUI\models\clip\ ~246MB flux_text_encoders/clip_l
T5XXL (FP8) t5xxl_fp8_e4m3fn.safetensors ComfyUI\models\clip\ ~4.9GB flux_text_encoders/t5xxl_fp8
FLUX UNET flux1-dev-Q4_0.gguf ComfyUI\models\unet\ ~6.79GB city96/FLUX.1-dev-gguf/Q4_0
LTX-Video ltx-video-2b-v0.9.1.safetensors ComfyUI\models\checkpoints\ ~5.5GB Lightricks/LTX-Video

가중치 일괄 자동 다운로드 스크립트 (PowerShell)

New-Item -ItemType Directory -Path "C:\ComfyUI_windows_portable\ComfyUI\models\unet" -Force
New-Item -ItemType Directory -Path "C:\ComfyUI_windows_portable\ComfyUI\models\checkpoints" -Force

curl.exe -L --progress-bar -o "C:\ComfyUI_windows_portable\ComfyUI\models\vae\ae.safetensors" "https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/ae.safetensors"
curl.exe -L --progress-bar -o "C:\ComfyUI_windows_portable\ComfyUI\models\clip\clip_l.safetensors" "https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors"
curl.exe -L --progress-bar -o "C:\ComfyUI_windows_portable\ComfyUI\models\clip\t5xxl_fp8_e4m3fn.safetensors" "https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn.safetensors"
curl.exe -L --progress-bar -o "C:\ComfyUI_windows_portable\ComfyUI\models\unet\flux1-dev-Q4_0.gguf" "https://huggingface.co/city96/FLUX.1-dev-gguf/resolve/main/flux1-dev-Q4_0.gguf"
curl.exe -L --progress-bar -o "C:\ComfyUI_windows_portable\ComfyUI\models\checkpoints\ltx-video-2b-v0.9.1.safetensors" "https://huggingface.co/Lightricks/LTX-Video/resolve/main/ltx-video-2b-v0.9.1.safetensors"

12GB VRAM 저비디오메모리 모드 구동

# 1. 상주 중인 LLM 메모리 즉각 언로드
ollama stop student
ollama stop hermes3:8b

# 2. ComfyUI 저비디오메모리 모드 구동
Set-Location "C:\ComfyUI_windows_portable"
.\run_nvidia_gpu.bat --lowvram

3. FLUX.1-dev Q4_0 GGUF 고해상도 텍스트-투-이미지(Txt2Img) 노드 연결

12GB VRAM 환경에서 최상급 실사 디테일과 한글/영문 타이포그래피를 완벽하게 생성하기 위한 노드 결선 규칙입니다.

🚨 FLUX 렌더링 절대 수칙: CFG 1.0 고정

기존 SD 1.5/SDXL과 달리 FLUX 아키텍처는 KSampler의 cfg 값을 무조건 1.0으로 고정해야 합니다. 프롬프트 추종 강도는 FluxGuidance 노드의 guidance(기본값 3.5) 수치로만 조절합니다. (CFG를 7.0 등으로 올리면 결과물이 완전히 하얗게 타버립니다.)

  1. Unet Loader (GGUF): unet_nameflux1-dev-Q4_0.gguf 선택.
  2. DualCLIPLoader: clip_name1t5xxl_fp8_e4m3fn.safetensors, clip_name2clip_l.safetensors, typeflux 지정.
  3. VAELoader: vae_nameae.safetensors 선택.
  4. CLIPTextEncode (긍정 프롬프트): DualCLIPLoader의 CLIP 출력선 연결 → 묘사 프롬프트 입력.
  5. FluxGuidance: 긍정 프롬프트 CONDITIONINGconditioning 연결, guidance: 3.5 설정.
  6. CLIPTextEncode (부정 프롬프트): DualCLIPLoader CLIP 연결 (공란 유지).
  7. EmptyLatentImage: width: 1024, height: 1024, batch_size: 1 설정.
  8. KSampler:
    • model ← Unet Loader (GGUF)의 MODEL 연결
    • positive ← FluxGuidance의 CONDITIONING 연결
    • negative ← 부정 CLIPTextEncode의 CONDITIONING 연결
    • latent_image ← EmptyLatentImage의 LATENT 연결
    • 필수 파라미터 세팅: steps: 20, cfg: 1.0 (고정), sampler_name: euler, scheduler: simple, denoise: 1.0
  9. VAEDecode: KSampler LATENTsamples, VAELoader VAEvae 연결.
  10. SaveImage: VAEDecode IMAGE 연결 후 Ctrl + Enter 실행.

4. LTX-Video 0.9.1 고해상도 비디오 생성 파이프라인 (25fps DiT)

DiT(Diffusion Transformer) 기반 고속 비디오 생성 모델로, 12GB VRAM에서 768×512 해상도의 부드러운 고화질 클립을 생성합니다.

💡 LTX-Video 해상도 및 프레임 수 엄수 규격

해상도 규격: 너비와 높이는 반드시 32의 배수여야 합니다 (권장: 768×512 또는 512×768).
프레임 수 규격: 3D VAE 압축 특성상 길이는 반드시 (8n + 1) 공식을 만족해야 합니다. (권장: 65 [8×8+1 = 25fps 기준 약 2.6초], 97 [8×12+1 = 약 3.8초]).

  1. CheckpointLoaderSimple: ckpt_nameltx-video-2b-v0.9.1.safetensors 로드.
  2. CLIPLoader: clip_namet5xxl_fp8_e4m3fn.safetensors, typeltxv 지정.
  3. CLIPTextEncode (긍정/부정 2개): CLIPLoader의 CLIP을 각각 연결.
    • 긍정 프롬프트: cinematic camera pan, a futuristic cybernetic server room, blinking LED status lights, ultra realistic, 4k
    • 부정 프롬프트: low quality, blurry, jerky motion, artifacts, watermark
  4. LTXVConditioning: 긍정/부정 프롬프트 연결, frame_rate: 25 설정.
  5. EmptyLTXVLatentVideo: width: 768, height: 512, length: 65, batch_size: 1 설정.
  6. KSampler:
    • model ← CheckpointLoaderSimple의 MODEL
    • positive / negative ← LTXVConditioning의 CONDITIONING
    • latent_image ← EmptyLTXVLatentVideo의 LATENT
    • 세팅값: steps: 25, cfg: 3.0 (LTX 표준), sampler_name: euler, scheduler: normal, denoise: 1.0
  7. VAEDecode: KSampler LATENT 및 CheckpointLoaderSimple의 VAE 연결.
  8. SaveAnimatedWEBP: VAEDecode IMAGE 연결, fps: 25, lossless: false, quality: 90 설정.