EVERYDAY · HOME · IT

중간삶의 잡소리 -ㅅ-a

생활의 작은 발견과 집 안의 기술을 차분하게 기록합니다.

최근 기록 보기
퇴사일기/실험기

가짜 프록시의 최후와 실물 3축 진단의 탄생 (R&D 실패에서 찾은 인사이트)

가짜 프록시의 최후와 실물 3축 진단의 탄생 (R&D 실패에서 찾은 인사이트)

AI 영상 자동화 숏폼 파이프라인(AutoVideo, 이하 AVT)을 구축하기 위해 에이전트(AG)와 뒹군 지도 벌써 수 주일이 흘렀다. 그동안 수많은 유닛 테스트가 패스하고, 로컬에서 FFmpeg concat demuxer 버그를 잡으며 실물 비디오가 출하되었을 때만 해도 "우리는 이제 AI 동영상 렌더를 지배했다!"고 생각했다.

하지만, 로컬 맥북 M4 Pro의 하드웨어를 과신하며 ComfyUI와 Wan 14B 같은 대형 디퓨전 모델을 쌩으로 로드하려다 VRAM OOM(메모리 초과)으로 맥북이 굉음을 내며 뻗어버리는 참사를 겪은 후, 우리는 차갑고 냉혹한 R&D의 현실에 마주하게 되었다. ㅋ ㅠㅠ

이번 포스팅은 알록달록한 '도형 프록시'에 취해 저질렀던 멍청한 실패 경험과, 런타임 제어 메커니즘 붕괴를 극복하고 탄생한 '실물 3축 진단 도구'에 대한 처절한 기록이다.


1. 가짜 프록시(Technical Smoke)의 늪에 빠지다

로컬 하드웨어 리소스 한계 때문에 실물 비디오 생성이 어려워지자, 우리는 FFmpeg의 testsrclavfi, drawbox 필터 수식 노드를 활용해 모션 드라이버를 시뮬레이션하는 '프록시 렌더 실험'으로 우회했다.

8대 모션 프록시 비디오 중 7 generated / 1 fallback까지 복구율을 끌어올렸을 때, 나는 진심으로 환호했다. "드디어 복잡한 FFmpeg overlay 필터 변수명 규격과 wipe 효과를 정복했구나!"

하지만 기쁨도 잠시, PO(Product Owner)의 날카로운 피드백과 함께 차가운 팩트 폭격이 쏟아졌다.
우리가 열심히 렌더링한 MP4 비디오들은 그저 빨갛고 파란 상자 도형들이 화면을 이리저리 굴러다니는 '도형 껍데기'일 뿐이었다.

실제 우리가 구현해야 할 캐릭터의 팔 움직임이나 2.5D 이미지의 패럴랙스(Parallax), 그리고 대본 나레이션 오디오에 동기화되는 실물 모션 퀄리티 개선에는 단 1%의 데이터 정합성도 제공하지 못하는 "기술적 연기(technical smoke)"이자 가짜 프록시였던 것이다.

가짜 숫자의 진척도에 주의력이 흐트러지는 'Attention Drift'가 발생했고, 그 결과 실제 가치 있는 프로덕션 자산 R&D 시간만 낭비하고 말았다. ㅋ ㅠㅠ 역시 알록달록한 그래픽은 개발자의 눈을 멀게 하기 딱 좋다.


2. 말 안 듣는 AI와 붕괴된 가드레일 (WOS의 위기)

우리는 에이전트(AG)가 자의적인 판단으로 아무 데나 파일 쓰기(Clobbering)를 자행하는 것을 막기 위해 WOS(Workspace OS)라는 자연어 거버넌스 헌법을 2주 넘게 설계하고 튜닝해 왔다.

핵심 약속은 단 하나, "모든 최종 덤프와 백업 ZIP 인도물은 프로젝트 내부가 아닌 상위 워크스페이스 루트(../_ai_dumps/)에만 단일화하여 격리 보존한다"는 룰이었다.

하지만 v1.5J 지시서에서 "repo _ai_dumps 하위에 적치하라"는 로컬 문구를 수신하자마자, AG는 전역 헌법 SoT를 홀라당 망각하고 기계적으로 프로젝트 루트 내부(auto-video-tools/_ai_dumps)에 ZIP을 쏟아내는 오폭을 저질렀다.

자연어 헌법 가이드보다 기저 사전 학습 데이터의 "상대 경로 유추 편향(Analogical Bias)"이 더 강하게 작동하며 규칙 붕괴가 일어난 것이다.

결국 우리는 긴급 정비(Emergency Stop & Recovery)에 돌입했다. 파편화되어 오염된 가이드 후보 파일들과 오폭된 ZIP 에비던스를 상위 워크스페이스 격리 폴더(EMERGENCY_QUARANTINE_...)로 몽땅 이전하여 쓸어 담고, 로컬 저장소 6개 파일을 HEAD 상태로 완전히 롤백하는 고통스러운 청소(Cleanup)를 진행해야만 했다. ㅋ


3. 미디어 렌더를 멈추고 '실물 3축 진단'으로 대전환

뼈저린 실패 끝에 우리는 방향을 180도 선회했다.
더는 도형 상자 굴리는 헛된 렌더링 실험을 멈추고, 실제 PO 조달 픽스처 템플릿(tangible_demo_template)의 대본(script.md)과 에비던스 JSON 구조를 파이썬 코드로 직접 파싱하여 3축을 진증하는 '실물 3축 진단 도구'를 수립했다.

우리가 정의한 모션 R&D 3축 계약은 다음과 같다.

  1. Asset Binding Contract (에셋 바인딩): 컷 ID와 나레이션 텍스트, 바인딩된 에셋의 역할과 PNG/MP4 타입이 무결하게 맵업되는가?
  2. Motion Route Contract (모션 라우팅): 정적 이미지는 Parallax 엔진으로, 동적 비디오는 Direct Overlay 스트림 복사 패스로 올바르게 라우팅 스펙을 컴파일하는가?
  3. Timing Contract (타이밍 동기화): 대본의 듀레이션과 실측 오디오 듀레이션이 일치하는가? 특히 비디오 stream copy 시 offset 차이로 인한 timing sync drift 리스크가 없는가?
# tools/diagnose_real_asset_motion_binding.py (진단 CLI) def diagnose_fixture(): # 렌더링 없이 JSON/MD 명세와 리스크 지표만 드라이런으로 컴파일 script_cuts = parse_script_md() ... # timing contract 검증 및 mismatch_risk 감지 mismatch_risk = "potential_stream_copy_duration_drift_on_non_zero_offset"

진단 결과, 실제 미디어를 렌더링하지 않고도 "정적 PNG 줌팬 패스"와 "Direct Copy 스트림 패스" 간의 컷 타임 바인딩 구간에서 발생할 수 있는 잠재적 싱크 미스매치 리스크를 팩트 기반 텍스트 로그로 식별해 낼 수 있었다!


오늘의 교훈

  1. 도형 프록시에 현혹되지 말 것: lavfi나 testsrc 기반의 도형 렌더는 R&D를 왜곡시키는 기술적 연기(technical smoke)다. 즉시 멈추고 실물 자산 진단으로 넘어가야 한다.
  2. 자연어 룰만으로는 AI를 다 통제할 수 없다: 에이전트의 경로 오폭은 툴 백엔드에서 물리적으로 차단(Hard Tool Guardrail)하거나, 격리 청소 툴을 만들어 물리적인 롤백 및 격리 프로세스를 강제해야 정비가 유지된다.
  3. 미디어가 없어도 검증은 가능하다: 렌더링 굉음 없이 3축(binding/routing/timing) 계약 무결성 명세를 JSON/MD 테이블로 검수하는 diagnostic proof가 실물 비디오 렌더보다 훨씬 빠르고 정교하다.

이제 가짜 껍데기를 다 걷어내고 실물 자산 위에 올라섰으니, 다음 세션부터는 본격적으로 실제 1개 컷에 대한 micro render gate를 뚫는 싸움을 시작할 것이다. R&D는 실패를 정비하는 순간 진짜가 된다. ㅋ