피드로 돌아가기
Dev.toBackend
원문 읽기
브라우저 없이 Pillow 기반 Python 렌더러로 프레임당 1초 미만 렌더링 구현
How I built a YouTube slide renderer in Python — eight kinds, no browser
AI 요약
Context
GitHub Actions 기반의 CI 파이프라인 내에서 정적 이미지 프레임을 생성하여 영상화하는 시스템 설계 필요. Puppeteer나 Headless Chromium과 같은 브라우저 기반 도구는 CI 환경의 리소스 제약과 실행 환경의 비결정성으로 인해 도입이 부적합한 상황.
Technical Solution
- 브라우저 의존성을 완전히 제거한 Pillow 라이브러리 기반의 전용 이미지 렌더러 설계
- 클래스 상속 구조 대신 Dispatch Table 패턴을 적용하여 8종의 슬라이드 타입을 확장 가능하게 구현
- 브랜드 일관성 유지를 위해 모든 캔버스에 공통 레이아웃을 적용하는 _chrome 함수를 기반으로 한 계층적 렌더링 수행
- OS별 폰트 경로 차이 문제를 해결하기 위해 가중치별 폰트 후보 리스트(Candidate List)를 통한 폴백 메커니즘 구축
- 메모리 효율을 위해 브랜드 로고 등 정적 자산에 대해 모듈 수준의 Lazy Loading 및 플래그 기반 캐싱 적용
- 텍스트 래핑 기능이 없는 Pillow의 한계를 draw.textlength()를 이용한 수동 라인 브레이크 로직으로 해결
실천 포인트
1. CI 환경에서 GUI 기반 도구 도입 전 리소스 제약과 실행 시간 분석
2. 상태 공유가 없는 단순 변환 로직의 경우 상속보다 Dispatch Table 패턴 검토
3. 외부 폰트 및 에셋 의존성 해결을 위한 폴백 리스트 및 Lazy Loading 적용 여부 확인
4. 렌더링 결과의 결정성을 확보하기 위해 추상화 레이어 최소화