AI 이미지/AI Video

종이접기 인간 댄스 비디오(ComfyUI)

하늘이푸른오늘 2024. 12. 31. 15:43

이 워크플로는 댄스 비디오를 종이접기(Origami) 스타일로 변환하는 워크플로입니다. 오리가미의 색과 형태는 원하는 대로 바꿀 수 있습니다. 배경은 일반적으로 입력 비디오를 따르지만, 프롬프트로 일부 변경할 수 있습니다.

소프트웨어

이 글에서는 스테이블 디퓨전용 GUI중에서도 제가 제일 좋아하는 ComfyUI를 사용합니다. ComfyUI가 처음이시라면, 설치 및 기본 사용방법  초보가이드를 확인하시기 바랍니다. 

워크플로의 원리

ControlNet

이 워크플로에서는 세가지 ControlNet을 사용하여 비디오의 구도를 복제합니다.

  • Depth 콘트롤넷 : Depth Anything 전처리기를 하여 depth 필드를 추출합니다. 일반 Midas 전처리기는 문제가 있습니다.
  • QR code 콘트롤넷 : Depth 콘트롤넷은 사람을 렌더링하는 경향이 있습니다. QR Code 콘트롤넷을 사용하면 종이접기 스타일을 끌어내는데 도움이 됩니다.
  • Soft Edge 콘트롤넷 Depth 콘트롤넷 만으로는 사람의 자세를 올바르게 렌더링하지 못합니다. HED Soft Edge 로 외곽선을 수정하면 사람의 형태를 올바르게 렌더링하고, 일부 배경도 복제가 가능합니다.

또, 여기에서는 IP Adapter Plus 를 사용하여 종이접기 스타일을 이미지에 밀어넣습니다. 이를 사용하면 참조 이미지를 복제하여 전체 이미지를 가져올 수 있습니다.

아래 참조 이미지는 SDXL 1.0으로 생성한 이미지입니다.

AnimateDiff

AnimateDiff 는 프레임간의 일관성을 향상시키는데 사용합니다. 여러가지 새로운 종류의 AnimateDiff 모델이 나왔지만, 이 워크플로에서는 예전 모델이 잘 작동하다는 것을 발견했습니다. 아래는 AnimateDiff 모델 테스트중 알아낸 사실들입니다.

  • mm_stabilized_high: 대비가 강한 색이 생성됩니다.
  • Animatediff v3: 색상이 약간 침침합니다(이 모델에는 추가 LoRA가 필요합니다)
  • Motion model v01: 다리부분이 잘 표현되지 않을 때가 있고 얼굴이 나타나기도 합니다.

이번에는 mm_stabilized_high 모델을 사용합니다.

모델

비디오를 생성할 때에는 LCM 모델을 사용하는 것을 좋아합니다(예전에 생성한 LCM 비디오 샘플을 보세요). LCM 모델을 사용하면 적어도 50% 이상의 시간을 절약할 수 있습니다. 하지만, 이 워크플로에서는 LCM 모델을 사용하지 않으려고 합니다. 어떤 이유인지 배경이 지루해지는 경향이 있기 때문입니다.

이번에는 DreamShaper 8 모델을 사용합니다.

디테일 추가

Add detail LoRA를 사용하면 디테일 수준을 조절할 수 있습니다. 원하는 수준에 따라 0.5~2.0 정도로 설정하면 됩니다.

따라하기

1단계: ComfyUI 워크플로 불러오기

아래의 JSON 파일을  다운로드 받은 후, ComfyUI 메뉴에서 Workflow -> Open을 사용해 불러옵니다. 

origami-man-depth-qr-HED.json
0.04MB

이 워크플로는 대부분 그냥 그대로 사용할 수 있지만, 때때로 오류가 발생할 수 있습니다. 그러한 경우, 다음과 같은 작업이 필요할 수 있습니다.

2단계: 입력 비디오 설정

입력 비디오를 불러옵니다. 아래의 비디오를 사용하셔도 됩니다.

man-dance-neon-bg-1080-1920-30fps-16s.mp4
11.07MB

이 비디오를  [Load Video(Upload)] 노드에서 맨아래의 "choose video to upload" 버튼을 눌러 지정합니다.

여기에서 frame_load_cap은 사용할 최대 프레임 수입니다. 테스트할 떄에는 16으로 지정하시고, 마음에 들때 큰 수로 바꿔주시면 됩니다.

생성할 비디오의 width와 height는 원 비디오의 종횡비(aspect ratio) 와 비슷해야 합니다. 좁은 쪽(여기서는 가로)를 체크포인트 모델의 해상도(SD1.5의 경우 512)의 0.5에서 1.5배로 설정하는 것이 좋습니다. 원 비디오가 1080x1920이므로, 가로를 512로 설정하면 세로는 512*1920/1080 = 910으로 설정합니다.

3단계: 모델 다운로드

체크포인트 모델

이 워크플로에서는 DreamShaper 8 모델을 사용합니다. 파일을 다운로드 받아 ComfyUI/models/checkpoints 폴더에 넣어줍니다. A1111과 모델을 공유할 경우 여기를 참고하세요.  다운로드가 완료되면 화면을 새로고침하신 후 [Load Checkpoint w/ Noise Select] 노드에서 이 모델을 지정합니다.

IP adapter

이 워크플로에서는 얼굴 및 의복의 일관성 유지를 위해 IP-adapter를 사용합니다. 

SD 1.5 IP adapter Plus 모델을 다운로드 받아 ComfyUI/models/ipadapter 폴더에 넣어줍니다. 다운로드가 완료되면 화면을 새로고침하신 후 [IPAdapter Model Loader] 노드에서 이 모델을 지정합니다.

SD 1.5 CLIP VISION 모델을 다운로드 받아 ComfyUI/models/clip_vision 폴더에 넣어줍니다. 다운로드 받은 후, CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors 로 파일명을 바꿔줍니다. 다운로드가 완료되면 화면을 새로고침하신 후 [Load CLIP Vision] 노드에서 이 모델을 지정합니다.

LoRA

add_detail  LoRA를 다운로드 받아 ComfyUI\models\loras 폴더에 넣어줍니다. 이 LoRA를 사용하면 세부 디테일이 향상됩니다. 다운로드가 완료되면 화면을 새로고침하신 후 [Load LoRA] 노드에서 이 모델을 지정합니다.

ControlNet

아래의 세 파일을 다운로드 받아 ComfyUI\models\controlnet 폴더에 넣어줍니다. 다운로드가 완료되면 화면을 새로고침하신 후 [Load Advanced ControlNet Model] 노드에서 이 모델을 지정합니다.

AnimateDiff

AnimateDiff mm-Stabilized High 모델을 다운로드 받아 ComfyUI\models\animatediff_models 폴더에 넣어줍니다. 다운로드가 완료되면 화면을 새로고침하신 후 [Load Advanced ControlNet Model] 노드에서 이 모델을 지정합니다.

4단계: IP adapter용 참조 이미지

[Load Image (IP-adapter)] 노드에 캐릭터를 위한 참조 이미지를 업로드합니다. 아래 이미지를 사용하셔도 됩니다.

참고로 이 이미지는 다음과 같은 프롬프트를 사용하여 SDXL 1.0 모델을 사용하여 생성한 것입니다.

origami of a person dancing

5단계: 이미지 생성

[Queue]  버튼을 누르면 이미지가 생성됩니다.

실행중 out-of-memory 오류가 발생할 경우, 아래와 같이 run_nvidia_gpu.bat 파일에 --disable-smart-memory를 추가하시면 됩니다.

.python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --disable-smart-memory

또 다른 예제는 이 글을 참고하세요.

비디오 변경 방법

씨드(Seed) 값 

씨드 값을 변경하면 일관성이 깨지는 문제가 해결될 수도 있습니다.

프롬프트

프롬프트와 IP-adapter 이미지를 변경하면 캐릭터를 변경할 수 있습니다. 두가지가 잘 맞을 수록 좋은 결과를 얻을 수 있습니다.

배경

배경의 외곽선은 HED 콘트롤넷을 통해 설정됩니다. 프롬프트와 IP adapter 이미지를 통해 제한된 범위내에서만 변경할 수 있습니다. HED ControlNet의 weight와 end_percent를 올려주면 배경 렌더링 결과가 좋아집니다.

비디오 입력

frame_load_cap은 최대로 불러올 프레임 수를 지정합니다. 16으로 테스트하고 원하는 결과를 얻을 수 있겠다 싶을 때 큰 값으로 되돌리시면 됩니다. 

select_every_nth는 몇번째 프레임을 렌더링할 것인지를 결정합니다. 2는 하나 걸러 하나씩 생성한다는 뜻입니다. 즉, 30FPS 가 15FPS로 줄어들게 됩니다. 1로 설정하면 가장 품질이 좋아집니다.

민, 푸른하늘

이 글은 stable-diffusion-art.com의 글을 번역하며 테스트하여 작성한 글입니다.