

2026년 4월 7일
내 결과물을 만드는 데 쓰는 워크플로우와 포뮬라를 그대로 담은 Prompt Studio를 만들어 배포했다. 어떤 언어를 쓰는 누구나 쉽게 스타일을 만들고, 프롬프트를 어떻게 써야 할지 고민하지 않고도 아이디어를 빠르게 결과물로 낼 수 있도록 설계했다.
처음에는 작은 실험이었다. 바이브 코딩을 공부할 겸 Claude로 내 작업 일부를 자동화해보는 수준으로 시작했다. 어느 순간 이걸 제대로 만들어보고 배포까지 해보자는 생각으로 바뀌었고, 혼자 쓰는 수준을 넘어서 누구나 사용할 수 있는 형태로 만들기 위해 시간을 들였다.
다른 사람들이 쓸 수 있게 배포하기
요즘 AI 영상 툴은 정말 빠르게 발전하고 있다. Kling Omni처럼 캐릭터를 미리 캐스팅해두고 원하는 장면에 배치하는 방식도 생겼고, 그 퀄리티도 점점 올라가고 있다.
하지만 나는 여전히 first frame 방식을 선호한다. 장면이 복잡해질 수록, 또는 원하는 스타일이 확고할 수록 일관성을 유지하기가 어렵기 때문이다. 캐릭터 캐스팅은 단순한 장면에서는 효과적이지만, 특정한 구도나 무드를 정확히 잡아야 할 때는 내가 직접 첫 프레임을 만들고 모션을 더하는 방식이 더 안정적으로 컨트롤된다.
내 워크플로우는 단순하다. Midjourney로 첫 프레임을 만들고, Kling에 넣어서 모션을 만든다. 하지만 프롬프트를 쓰는 과정에서 일이 많아진다. 키워드를 문장으로 정리하는 데 시간이 들고, --ar 9:16 같은 파라미터를 반복해서 붙이는 것도 소모적인 반복 작업이다.

Kling Canvas를 활용하면 아이디에이션부터 스틸 이미지, 영상 제작까지 하나의 워크플로우 안에서 이어서 작업할 수 있다. 하나의 프로젝트 안에서 스토리라인에 맞는 배경과 소품 등 필요한 요소를 함께 생성하고 관리할 수 있다는 점에서 편리하다.

하지만 한 번에 많은 결과물을 한 곳에서 만들 수 있다는 장점이 있는 반면, 개별 결과물의 퀄리티를 컨트롤하기 쉽지 않다.
First Frame 워크플로우에서 캐릭터 일관성 유지하기
이 방식에서 가장 많이 나오는 문제는 캐릭터 consistency다. 상황에 따라 몇 가지 방법을 같이 쓴다.
하나는 Gemini(Nano Banana)를 사용하는 방식이다. “이 장면에 이 두 사람이 출연하게 해줘”나 “이 남자가 훈련하는 장면 스틸컷 4개로 그려줘”처럼 장면을 직접 설명해서 결과물을 만든다.
또 다른 방법은 Kling Omni 3.0에서 scene에 element를 넣거나 캐릭터를 교체하는 방식이다. continuity를 맞추기 위한 접근이다.
문제는 Omni로 만든 결과가 안정적이지 않았다는 점이다. 캐릭터 비율이 흔들리거나 디테일이 프레임마다 깨지고, 전체적인 퀄리티를 유지하기가 어려웠다. 사람이 많이 나오는 전쟁이나 전투처럼 장면이 복잡할수록 이런 문제가 더 크게 드러났다.

나노바나나에서 제작한 턴어라운드 이미지를 Kling의 Element로 추가한 뒤, 프롬프트 작성 시 해당 Element를 Bind하면 first frame 이후의 다른 샷에서도 캐릭터의 일관성을 최대한 유지할 수 있다. 영상 스타일과 캐릭터의 consistency를 동시에 잡는 방법이다.
그래서 결국 한땀 한땀 first frame을 직접 만드는 방식을 더 선호하게 된다. Prompt Studio에는 Midjourney에서 만든 인물을 기반으로 안정적인 턴어라운드를 만들 수 있는 Nano Banana 최적화 프롬프트 생성 캐릭터 탭을 추가했다. 여기서 만든 이미지를 Kling에 캐릭터 element로 넣어두면 복잡한 액션에서도 일관성을 유지하는 데 도움이 된다.
사실 이미 한 번 만든 적 있다
이 아이디어가 완전히 새로운 것은 아니다. 최근 회사에서 브랜드 가이드에 기반해 콘텐츠 작성과 교정을 지원하는 협업 툴을 바이브 코딩으로 만든 적이 있다. 이것보다 훨씬 더 복잡한 구조였다.
브랜드 허브는 마이클 브랜드 가이드라인과 UX 원칙을 학습한 AI 기반 툴로, 콘텐츠 작성과 교정을 지원하는 시스템이다. Claude를 활용해 바이브 코딩 방식으로 구현했다. 여기에 키워드를 입력하면 마이클 포토그래피 스타일에 맞게 자동 변환된 Midjourney 프롬프트를 생성하는 기능도 포함했다.
브랜드 무드보드를 분석해 이를 스타일 로직으로 구조화했고, 디자이너가 간단한 키워드만 입력해도 브랜드 방향에 맞는 결과가 나오도록 설계했다. 프롬프트에 익숙하지 않은 디자이너도 쉽게 사용할 수 있도록 했으며, 결과물의 일관성 유지에 중점을 두었다.
사내에서는 정석적인 방식으로 개발자들과 함께 만들어 배포하고 있지만, 이 개인 프로젝트는 훨씬 컴팩트한 방식으로 전체 흐름을 직접 설계하고 구현해 배포까지 진행했다.
작업 방식을 담은 툴 설계하기

툴의 이름은 Prompt Studio라고 지었다. 새로운 방식을 만들기보다 기존 작업 흐름을 보조하는 데 집중했다.
이미지 프롬프트는 장면 설명을 Midjourney 최적화 프롬프트로 변환한다. 이미지를 첨부하면 분석해서 프롬프트를 생성하고, Retro Cinematic, Wuxia Fantasy, Hyperreal Analog 같은 스타일 프리셋도 포함했다. 화면 비율을 선택하면 --ar 파라미터가 자동으로 붙는다.
영상 프롬프트는 first frame 이미지를 기반으로 모션 프롬프트를 생성한다. Slow Motion, Handheld Shake, Single Shot Only 같은 옵션을 선택할 수 있고, Imagine과 Literal 두 가지 모드로 나뉜다. Imagine은 유저가 입력하지 않은 부분을 시네마틱하게 보완하고 확장한다. Literal은 입력한 내용을 그대로 유지하면서 프롬프트 최적화만 진행한다.
스타일 프리셋은 내가 실제로 반복해서 사용하던 무드보드와 프롬프트 조합을 기반으로 만들었다. 자주 쓰던 것을 구조화해서 다른 사람도 사용할 수 있게 했다.
다른 사람들이 쓸 수 있게 배포하기

코드는 Claude와 함께 작성했다. React + Vite 기반의 프론트엔드에 Vercel Edge Function을 붙여 API 프록시로 사용하고, API 키는 서버에서만 처리되도록 구성했다.
배포의 목적은 인프라를 배우는 것이 아니었다. 그게 목적이었다면 로컬에서만 써도 충분했을 것이다. 다른 디자이너들이 별도 설정 없이 바로 사용할 수 있게 만드는 것이 목표였다.
GitHub에 코드를 올리고, Vercel에 연결하고, 커스텀 도메인을 설정했다. git init, git add, git commit, git push 과정을 거친 뒤, 환경 변수 설정과 도메인 프로바이더에서 DNS 설정까지 진행했다.
Anthropic API 키는 Vercel Environment Variables에 저장하고 process.env로 불러와 클라이언트에 노출되지 않도록 했다.
이제는 코드를 수정하고 push하면 자동으로 재배포된다. 이로써 로컬에서만 쓰는 것이 아니라 다른 사람도 바로 사용할 수 있는 형태로 운영된다.

가장 큰 변화는 반복 작업과 프롬프트를 고민하는 시간이 줄어든 점이다. 장면을 설명하면 프롬프트가 생성되고, 파라미터도 빠르게 적용된다. 기존 작업 흐름은 유지하면서 효율만 개선된다.
스타일 프리셋은 내가 실제로 사용하는 방식에서 나온 것이어서 결과물도 자연스럽게 일관성을 유지한다. 다른 크리에이터들도 프롬프트보다 아이디어에 더 집중할 수 있도록, 스스로 만들고 검증한 프리셋을 공개했다.
의미 있게 느껴진 부분은 단순히 툴을 만들었다는 것이 아니라, 기획부터 배포까지 다른 사람도 사용할 수 있는 형태로 완성해봤다는 점이다. 바이브 코딩으로 앱을 배포하는 경험이 궁금했는데, 이번 작업을 통해 end-to-end로 직접 해볼 수 있었다.
내 작업에서 실제로 필요했던 부분을 기반으로, 작고 실용적인 앱을 만들어본 경험이어서 더 현실감 있게 느껴졌다. 이제 머릿속에 있던 다른 아이디어들도 큰 부담 없이 실행해볼 수 있을 것 같다.