
고양이와 함께 성장할 수 없었기에, 이를 해결하기 위한 Django 패키지를 만들었습니다
요약
ByteDance의 Doubao API를 활용하여 이미지 합성 및 이미지-투-비디오 생성을 수행하는 Django 패키지인 `django-doubao`를 소개합니다. 개인적인 추억을 AI 기술로 재현하는 과정을 통해 개발된 이 패키지는 재사용 가능한 Django 앱 형태로 제공됩니다.
핵심 포인트
- Doubao API를 이용한 다중 이미지 합성 기능 제공
- 생성된 이미지를 5~12초 분량의 영상으로 변환
- Python 패키지 `django-doubao`로 GitHub에 공개
- Django 뷰를 통한 간편한 AI 이미지 및 비디오 생성 구현
저는 항상 고양이를 원했지만, 어릴 적에는 키우지 못했습니다. 수십 년이 지난 후, 저는 Doubao API를 사용하여 어린 시절의 사진과 고양이 이미지를 합성했고, AI 이미지 융합(Image Fusion) 및 이미지-투-비디오(Image-to-Video) 생성을 수행하는 재사용 가능한 Django 앱(django-doubao)을 구축했습니다. 이것이 어떻게 작동하는지, 그리고 왜 만들었는지 소개합니다.
빈자리
어릴 적 저는 고양이를 간절히 원했습니다. 어머니는 허락하지 않으셨죠. 저는 이웃집 창문에 얼굴을 바짝 대고, 햇볕 아래에서 기지개를 켜고 구르는 줄무늬 고양이를 바라보곤 했습니다. 가슴 한구석이 허전했습니다.
40년이 지나서야 마침내 저만의 고양이를 갖게 되었습니다. 하지만 곧 새로운 슬픔이 찾아왔습니다. 고양이와 함께 성장할 수 없다는 사실이었습니다.
그래서 저는 한 가지 방법을 고안했습니다.
Doubao(ByteDance의 AI 플랫폼)에서, 앞니가 빠진 채 웃고 있는 저의 오래되고 빛바랜 어린 시절 사진을 통통한 흰 고양이의 얼굴과 합성했습니다. 갑자기 우리는 함께 놀고 있었습니다. 그다음에는 비디오를 만들었습니다. 꽃밭 사이로 고양이를 쫓아가는 아이, 바람에 흩날리는 머리카락, 그리고 녹아내리는 세월을 담은 영상 말이죠.
각각의 창작물은 제 마음속 깊은 곳에서부터 입가와 눈가로 잔물결을 일으켰습니다.
프로그래머의 해결책
처음에는 Doubao의 공식 웹사이트에서 시작했지만, 곧 이런 생각이 들었습니다. '나는 프로그래머인데, 왜 직접 앱을 만들지 않을까?'
저는 Doubao API 키를 발급받고, Django 프로젝트를 설정한 뒤, 저만의 장난감 상자를 여는 열쇠가 될 utils.py를 작성했습니다. (300줄도 되지 않는 짧은 코드였습니다.)
저의 루틴:
- 아름다운 풍경을 선택합니다. 매미 소리가 가득한 여름날, 어린 시절 살던 후통(hutong)의 오래된 회화나무 같은 곳 말이죠.
- 저의 어린 시절 얼굴과 통통한 흰 고양이(눈덩이처럼 둥근)를 추가합니다.
- 우리가 함께 노는 하나의 이미지로 합성합니다.
- 그 정지된 사진에 애니메이션을 입힙니다. 고양이는 풀밭 위를 구르고, 아이는 뒤쫓으며, 오직 기억 속에서만 느껴지는 미풍에 꽃들이 흔들립니다.
저는 **두 개의 Django 뷰(Views)**를 만들었습니다:
- 첫 번째는 여러 장의 참조 이미지를 하나의 AI 생성 이미지로 합성합니다.
- 두 번째는 그 이미지를 짧은 영상(5~12초)으로 변환합니다.
소년과 고양이가 화면을 가로질러 움직이는 것을 보았을 때, 제 안의 오랫동안 비어 있던 무언가가 부드럽게 채워지는 것을 느꼈습니다.
저는 이 모든 것을 Python 패키지인 django-doubao로 패키징하여 GitHub에 공개했습니다.
패키지 기능
- 다중 이미지 합성 (Multi-image fusion) – 여러 장의 참조 이미지와 텍스트 프롬프트(text prompt)를 결합하여 하나의 새로운 AI 이미지를 생성합니다.
- 이미지-to-비디오 생성 (Image-to-video generation) – 생성되었거나 업로드된 단일 이미지를 5~12초 길이의 영상으로 변환합니다. 종횡비(aspect ratios)와 해상도(resolutions)를 지원하며, 영상과 마지막 프레임을 반환합니다.
- 비동기 폴링 (Asynchronous polling) – 영상 생성은 비동기(async)로 이루어지며, 패키지가 자동으로 폴링(poll)합니다. 별도의
while루프가 필요하지 않습니다. - 작업 기록 (Task records) – Django 모델(models)을 통해 과거의 생성 기록을 추적하거나 재현할 수 있습니다.
간단한 아키텍처 개요
django-doubao/
├── doubao/
│ ├── models.py # ImageGeneration, VideoGeneration
...
주요 결정 사항:
- 내장 권한 없음 (No built-in permissions) – 각 프로젝트의 상황이 다르므로, 사용자가 직접
login_required나user_passes_test로 뷰(views)를 감싸야 합니다. - 독립형 템플릿 (Self-contained templates) – 프로젝트에
base.html이 없더라도 작동합니다. 필요에 따라 템플릿을 오버라이드(override)할 수 있습니다. - 동기식 폴링 (Synchronous polling) – 낮은 동시성(low-concurrency)의 개인적 용도에 적합하며, 나중에 Celery로 교체할 수 있습니다.
django-doubao 사용법
설치:
pip install django-doubao
INSTALLED_APPS에 추가:
INSTALLED_APPS = [
...
'doubao',
...
API 키 설정:
DOUBAO_API_KEY = "your-key-here"
URL 포함:
# urls.py
path('doubao/', include('doubao.urls')),
그 다음 /doubao/image/를 방문하여 이미지를 생성하고, /doubao/video/를 방문하여 이를 영상으로 변환하세요.
이 글을 공유하는 이유
그저 온라인 도구들을 계속 사용할 수도 있었습니다. 하지만 프로그래머로서 저는 코드로 작은 세상을 만들기로 했습니다. 아이와 고양이가 마침내 함께 달리고, 공상에 잠기고, 단풍잎이 떨어지는 것을 함께 바라볼 수 있는 그런 세상을 말입니다.
만약 여러분도 오래된 사진을 되살리거나 기억에 생동감을 불어넣고 싶다는 비슷한 바람이 있다면, django-doubao가 여러분이 시행착오를 덜 겪도록 도와줄 수 있기를 바랍니다.
코드는 벽돌과 같습니다. 중요한 것은 그것이 얼마나 복잡한가가 아니라, 그것으로 무엇을 만들어내는가입니다.
고양이가 내 곁에서 가르랑거립니다. 화면 속 영상은 반복 재생됩니다. 불을 끄고 화면의 잔광만을 남겨두니, 그 오래된 공허함이 진정으로 채워진 것만 같습니다.
여러분의 생각은 어떠신가요? AI를 사용해 어린 시절의 빈틈을 채워본 적이 있나요? 댓글로 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기