개요
ViMax는 감독, 각본가, 프로듀서 및 비디오 생성 기능을 하나로 통합한 올인원 에이전트 비디오 생성 플랫폼입니다. 원본 아이디어, 완성된 소설 또는 시나리오를 기반으로 스토리보드, 캐릭터 및 최종 비디오를 자율적으로 생성할 수 있으며, 아이디어-비디오 변환, 소설 각색, 시나리오 창작 및 개인 출연 등 다양한 모드를 지원합니다.
README 미리보기
\n \n \n \n\n ViMax: Agentic Video Generation\n\n \n \n\n \n \n \n \n \n\n \n \n \n \n\n \n \n \n\n\n\n \n\n \n \n\n \n \n \n\n\n\n---\n\n### 🚨 Current Video Generation Limitations:\n- ❌ **Limited to Short Clips** - Most AI tools generate only seconds of footage. \n- ❌ **Consistency Chaos** - Characters and scenes change unpredictably across frames. \n- ❌ **Visual-Only Focus** - Missing scripts, audio, narrative structure, and storytelling depth. \n\n### 💡 ViMax Solution:\n🎬 **Director**, **Screenwriter**, **Producer**, and **Video Generator** **All-in-One**! We're exploring a future where AI becomes a complete creative powerhouse. 💡 Simply input your concept. ViMax autonomously handles the rest. It orchestrates scriptwriting, storyboarding, character creation, and final video generation—all end-to-end. 🚀\n\nhttps://github.com/user-attachments/assets/5bad46b2-8276-4e1d-9480-3522640744b2\n\n\n\n\n\n---\n\n\n## 📑 Table of Contents\n\n- [💡 Key Features](#key-features)\n- [🔮 Demos](#Video-Demos-Generated-from-Scratch)\n- [🏗️ Architecture](#️-architecture)\n- [🚀 Quick Start](#quick-start)\n\n---\n## 💡Key Features\n\n\n\n\n\n\n\n\n🌟 Idea2Video\n\n\n\n \n\n\n\nFrom Spark to Screen\n\n\n\nTransform raw ideas into complete video stories through intelligent multi-agent workflows automating storytelling, character design, and production .\n\n\n\n\n\n\n\n\n\n🎨 Novel2Video\n\n\n\n \n\n\n\nSmart Literary Adaptation Engine\n\n\n\nTransform complete novels into episodic video content with intelligent narrative compression, character tracking, and scene-by-scene visual adaptation\n\n\n\n\n\n\n\n\n⚙️ Script2Video\n\n\n\n \n\n\n\nUnlimited Screenplay Video Creation\n\n\n\nUnleash your creativity by writing any screenplay from personal stories to epic adventures, giving you complete control over every aspect of your visual storytelling.\n\n\n\n\n\n\n\n\n\n\n🤳 AutoCameo\n\n\n\n \n\n\n\nGenerate Video from Your Photo\n\n\n\n Crea
FAQ (2)
문제 해결LLM이 non-Optional Pydantic 필드에 대해 null을 반환할 때 LangChain OutputParserException을 해결하는 방법
이 오류는 Pydantic이 int, bool, str 타입의 필수 필드에 대해 null을 거부하기 때문에 발생합니다. LLM이 null을 반환할 수 있는 모든 필드를 Optional로 지정하고 기본값을 None으로 설정하세요:
from typing import Optional
from pydantic import BaseModel, Field, model_validator
class CameraParentItem(BaseModel):
parent_cam_idx: Optional[int] = Field(
default=None,
description="The index of the parent camera. Use null for the root camera.",
examples=[0, 1, None],
)
parent_shot_idx: Optional[int] = Field(
default=None,
description="The index of the dependent shot. Use null for the root shot.",
examples=[0, 3, None],
)
reason: Optional[str] = Field(
default=None,
description="The reason for selecting the parent camera.",
)
is_parent_fully_covers_child: Optional[bool] = Field(
default=None,
description="Whether the parent camera fully covers the child camera's content.",
examples=[True, False, None],
)
missing_info: Optional[str] = Field(
default=None,
description="Elements in the child shot not covered by the parent shot. Set to null when fully covered.",
)
루트 항목만 null 부모 참조를 가질 수 있는 경우, 루트가 아닌 항목이 여전히 유효하도록 검증을 추가하세요:
@model_validator(mode="after")
def validate_root_item(self):
if self.parent_cam_idx is None or self.parent_shot_idx is None:
if self.reason is None or "root" not in self.reason.lower():
raise ValueError("Only the root camera/shot may have null parent indices")
return self
또한 LLM 프롬프트를 업데이트하여 parent_cam_idx와 parent_shot_idx는 루트 항목에서만 null이어야 하며, 그 외의 경우에는 정수여야 함을 명시적으로 밝히세요.
문제 해결ViMax에서 "'Novel2MoviePipeline' object has no attribute 'working_dir'" 오류를 해결하는 방법
Novel2MoviePipeline.__init__에 누락된 속성을 정의하세요. 현재 파이프라인은 self.working_dir, self.embeddings, self.novel_compressor를 할당하지 않은 채 사용합니다. 다음과 같은 초기화 메서드를 추가하세요:
from pathlib import Path
class Novel2MoviePipeline:
def __init__(self, embeddings, novel_compressor, working_dir="output", ...):
self.embeddings = embeddings
self.novel_compressor = novel_compressor
self.working_dir = Path(working_dir)
self.working_dir.mkdir(parents=True, exist_ok=True)
파이프라인을 인스턴스화할 때 필요한 의존성을 전달하고, 오래된 import를 현재 interfaces 패키지를 사용하도록 업데이트하세요. 이는 이슈 #43에 대한 PR "fix: initialize Novel2MoviePipeline dependencies"에서 수정되었습니다.