diff --git a/README.md b/README.md index f5fa33f..1ed06a4 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@
Made with ❤️ by JarvisAIHub
+Made with ❤️ by PixelleLab
diff --git a/api/__init__.py b/api/__init__.py index 606ac21..bee1cdf 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -1,5 +1,5 @@ """ -ReelForge API Layer +Pixelle-Video API Layer FastAPI-based REST API for video generation services. """ diff --git a/api/app.py b/api/app.py index 950ce86..d4965e2 100644 --- a/api/app.py +++ b/api/app.py @@ -1,5 +1,5 @@ """ -ReelForge FastAPI Application +Pixelle-Video FastAPI Application Main FastAPI app with all routers and middleware. @@ -18,7 +18,7 @@ from loguru import logger from api.config import api_config from api.tasks import task_manager -from api.dependencies import shutdown_reelforge +from api.dependencies import shutdown_pixelle_video # Import routers from api.routers import ( @@ -41,24 +41,24 @@ async def lifespan(app: FastAPI): Handles startup and shutdown events. """ # Startup - logger.info("🚀 Starting ReelForge API...") + logger.info("🚀 Starting Pixelle-Video API...") await task_manager.start() - logger.info("✅ ReelForge API started successfully\n") + logger.info("✅ Pixelle-Video API started successfully\n") yield # Shutdown - logger.info("🛑 Shutting down ReelForge API...") + logger.info("🛑 Shutting down Pixelle-Video API...") await task_manager.stop() - await shutdown_reelforge() - logger.info("✅ ReelForge API shutdown complete") + await shutdown_pixelle_video() + logger.info("✅ Pixelle-Video API shutdown complete") # Create FastAPI app app = FastAPI( - title="ReelForge API", + title="Pixelle-Video API", description=""" - ## ReelForge - AI Video Generation Platform API + ## Pixelle-Video - AI Video Generation Platform API ### Features - 🤖 **LLM**: Large language model integration @@ -113,7 +113,7 @@ app.include_router(files_router, prefix=api_config.api_prefix) async def root(): """Root endpoint with API information""" return { - "service": "ReelForge API", + "service": "Pixelle-Video API", "version": "0.1.0", "docs": api_config.docs_url, "health": "/health", @@ -132,7 +132,7 @@ if __name__ == "__main__": import uvicorn # Parse command line arguments - parser = argparse.ArgumentParser(description="Start ReelForge API Server") + parser = argparse.ArgumentParser(description="Start Pixelle-Video API Server") parser.add_argument("--host", default="0.0.0.0", help="Host to bind to") parser.add_argument("--port", type=int, default=8000, help="Port to bind to") parser.add_argument("--reload", action="store_true", help="Enable auto-reload") @@ -142,7 +142,7 @@ if __name__ == "__main__": # Print startup banner print(f""" ╔══════════════════════════════════════════════════════════════╗ -║ ReelForge API Server ║ +║ Pixelle-Video API Server ║ ╚══════════════════════════════════════════════════════════════╝ Starting server at http://{args.host}:{args.port} diff --git a/api/dependencies.py b/api/dependencies.py index 1be6358..3976849 100644 --- a/api/dependencies.py +++ b/api/dependencies.py @@ -1,45 +1,45 @@ """ FastAPI Dependencies -Provides dependency injection for ReelForgeCore and other services. +Provides dependency injection for PixelleVideoCore and other services. """ from typing import Annotated from fastapi import Depends from loguru import logger -from reelforge.service import ReelForgeCore +from pixelle_video.service import PixelleVideoCore -# Global ReelForge instance -_reelforge_instance: ReelForgeCore = None +# Global Pixelle-Video instance +_pixelle_video_instance: PixelleVideoCore = None -async def get_reelforge() -> ReelForgeCore: +async def get_pixelle_video() -> PixelleVideoCore: """ - Get ReelForge core instance (dependency injection) + Get Pixelle-Video core instance (dependency injection) Returns: - ReelForgeCore instance + PixelleVideoCore instance """ - global _reelforge_instance + global _pixelle_video_instance - if _reelforge_instance is None: - _reelforge_instance = ReelForgeCore() - await _reelforge_instance.initialize() - logger.info("✅ ReelForge initialized for API") + if _pixelle_video_instance is None: + _pixelle_video_instance = PixelleVideoCore() + await _pixelle_video_instance.initialize() + logger.info("✅ Pixelle-Video initialized for API") - return _reelforge_instance + return _pixelle_video_instance -async def shutdown_reelforge(): - """Shutdown ReelForge instance""" - global _reelforge_instance - if _reelforge_instance: - logger.info("Shutting down ReelForge...") - _reelforge_instance = None +async def shutdown_pixelle_video(): + """Shutdown Pixelle-Video instance""" + global _pixelle_video_instance + if _pixelle_video_instance: + logger.info("Shutting down Pixelle-Video...") + _pixelle_video_instance = None # Type alias for dependency injection -ReelForgeDep = Annotated[ReelForgeCore, Depends(get_reelforge)] +PixelleVideoDep = Annotated[PixelleVideoCore, Depends(get_pixelle_video)] diff --git a/api/routers/content.py b/api/routers/content.py index 27d4aba..ba2c28e 100644 --- a/api/routers/content.py +++ b/api/routers/content.py @@ -7,7 +7,7 @@ Endpoints for generating narrations, image prompts, and titles. from fastapi import APIRouter, HTTPException from loguru import logger -from api.dependencies import ReelForgeDep +from api.dependencies import PixelleVideoDep from api.schemas.content import ( NarrationGenerateRequest, NarrationGenerateResponse, @@ -23,7 +23,7 @@ router = APIRouter(prefix="/content", tags=["Content Generation"]) @router.post("/narration", response_model=NarrationGenerateResponse) async def generate_narration( request: NarrationGenerateRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ Generate narrations from text @@ -41,7 +41,7 @@ async def generate_narration( logger.info(f"Generating {request.n_scenes} narrations from text") # Call narration generator service - narrations = await reelforge.narration_generator( + narrations = await pixelle_video.narration_generator( text=request.text, n_scenes=request.n_scenes, min_words=request.min_words, @@ -60,7 +60,7 @@ async def generate_narration( @router.post("/image-prompt", response_model=ImagePromptGenerateResponse) async def generate_image_prompt( request: ImagePromptGenerateRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ Generate image prompts from narrations @@ -77,7 +77,7 @@ async def generate_image_prompt( logger.info(f"Generating image prompts for {len(request.narrations)} narrations") # Call image prompt generator service - image_prompts = await reelforge.image_prompt_generator( + image_prompts = await pixelle_video.image_prompt_generator( narrations=request.narrations, min_words=request.min_words, max_words=request.max_words @@ -95,7 +95,7 @@ async def generate_image_prompt( @router.post("/title", response_model=TitleGenerateResponse) async def generate_title( request: TitleGenerateRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ Generate video title from text @@ -111,7 +111,7 @@ async def generate_title( logger.info("Generating title from text") # Call title generator service - title = await reelforge.title_generator( + title = await pixelle_video.title_generator( text=request.text ) diff --git a/api/routers/health.py b/api/routers/health.py index 1a36df9..b215300 100644 --- a/api/routers/health.py +++ b/api/routers/health.py @@ -12,7 +12,7 @@ class HealthResponse(BaseModel): """Health check response""" status: str = "healthy" version: str = "0.1.0" - service: str = "ReelForge API" + service: str = "Pixelle-Video API" class CapabilitiesResponse(BaseModel): diff --git a/api/routers/image.py b/api/routers/image.py index fa1ed27..7912f2b 100644 --- a/api/routers/image.py +++ b/api/routers/image.py @@ -5,7 +5,7 @@ Image generation endpoints from fastapi import APIRouter, HTTPException from loguru import logger -from api.dependencies import ReelForgeDep +from api.dependencies import PixelleVideoDep from api.schemas.image import ImageGenerateRequest, ImageGenerateResponse router = APIRouter(prefix="/image", tags=["Image"]) @@ -14,7 +14,7 @@ router = APIRouter(prefix="/image", tags=["Image"]) @router.post("/generate", response_model=ImageGenerateResponse) async def image_generate( request: ImageGenerateRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ Image generation endpoint @@ -32,7 +32,7 @@ async def image_generate( logger.info(f"Image generation request: {request.prompt[:50]}...") # Call image service - image_path = await reelforge.image( + image_path = await pixelle_video.image( prompt=request.prompt, width=request.width, height=request.height, diff --git a/api/routers/llm.py b/api/routers/llm.py index 8a2535d..b9986a7 100644 --- a/api/routers/llm.py +++ b/api/routers/llm.py @@ -5,7 +5,7 @@ LLM (Large Language Model) endpoints from fastapi import APIRouter, HTTPException from loguru import logger -from api.dependencies import ReelForgeDep +from api.dependencies import PixelleVideoDep from api.schemas.llm import LLMChatRequest, LLMChatResponse router = APIRouter(prefix="/llm", tags=["LLM"]) @@ -14,7 +14,7 @@ router = APIRouter(prefix="/llm", tags=["LLM"]) @router.post("/chat", response_model=LLMChatResponse) async def llm_chat( request: LLMChatRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ LLM chat endpoint @@ -31,7 +31,7 @@ async def llm_chat( logger.info(f"LLM chat request: {request.prompt[:50]}...") # Call LLM service - response = await reelforge.llm( + response = await pixelle_video.llm( prompt=request.prompt, temperature=request.temperature, max_tokens=request.max_tokens diff --git a/api/routers/tts.py b/api/routers/tts.py index 4ad747e..af63225 100644 --- a/api/routers/tts.py +++ b/api/routers/tts.py @@ -5,9 +5,9 @@ TTS (Text-to-Speech) endpoints from fastapi import APIRouter, HTTPException from loguru import logger -from api.dependencies import ReelForgeDep +from api.dependencies import PixelleVideoDep from api.schemas.tts import TTSSynthesizeRequest, TTSSynthesizeResponse -from reelforge.utils.tts_util import get_audio_duration +from pixelle_video.utils.tts_util import get_audio_duration router = APIRouter(prefix="/tts", tags=["TTS"]) @@ -15,7 +15,7 @@ router = APIRouter(prefix="/tts", tags=["TTS"]) @router.post("/synthesize", response_model=TTSSynthesizeResponse) async def tts_synthesize( request: TTSSynthesizeRequest, - reelforge: ReelForgeDep + pixelle_video: PixelleVideoDep ): """ Text-to-Speech synthesis endpoint @@ -31,7 +31,7 @@ async def tts_synthesize( logger.info(f"TTS synthesis request: {request.text[:50]}...") # Call TTS service - audio_path = await reelforge.tts( + audio_path = await pixelle_video.tts( text=request.text, voice_id=request.voice_id ) diff --git a/api/routers/video.py b/api/routers/video.py index de47937..9119d40 100644 --- a/api/routers/video.py +++ b/api/routers/video.py @@ -8,7 +8,7 @@ import os from fastapi import APIRouter, HTTPException, Request from loguru import logger -from api.dependencies import ReelForgeDep +from api.dependencies import PixelleVideoDep from api.schemas.video import ( VideoGenerateRequest, VideoGenerateResponse, @@ -32,7 +32,7 @@ def path_to_url(request: Request, file_path: str) -> str: @router.post("/generate/sync", response_model=VideoGenerateResponse) async def generate_video_sync( request_body: VideoGenerateRequest, - reelforge: ReelForgeDep, + pixelle_video: PixelleVideoDep, request: Request ): """ @@ -52,7 +52,7 @@ async def generate_video_sync( logger.info(f"Sync video generation: {request_body.text[:50]}...") # Call video generator service - result = await reelforge.generate_video( + result = await pixelle_video.generate_video( text=request_body.text, mode=request_body.mode, title=request_body.title, @@ -94,7 +94,7 @@ async def generate_video_sync( @router.post("/generate/async", response_model=VideoGenerateAsyncResponse) async def generate_video_async( request_body: VideoGenerateRequest, - reelforge: ReelForgeDep, + pixelle_video: PixelleVideoDep, request: Request ): """ @@ -126,7 +126,7 @@ async def generate_video_async( # Define async execution function async def execute_video_generation(): """Execute video generation in background""" - result = await reelforge.generate_video( + result = await pixelle_video.generate_video( text=request_body.text, mode=request_body.mode, title=request_body.title, diff --git a/api/schemas/tts.py b/api/schemas/tts.py index de41df8..632abd8 100644 --- a/api/schemas/tts.py +++ b/api/schemas/tts.py @@ -13,7 +13,7 @@ class TTSSynthesizeRequest(BaseModel): class Config: json_schema_extra = { "example": { - "text": "Hello, welcome to ReelForge!", + "text": "Hello, welcome to Pixelle-Video!", "voice_id": "[Chinese] zh-CN Yunjian" } } diff --git a/config.example.yaml b/config.example.yaml index b8661b6..1c97061 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -1,8 +1,8 @@ -# ReelForge Configuration +# Pixelle-Video Configuration # Copy this file to config.yaml and fill in your settings # ⚠️ Never commit config.yaml to Git! -project_name: ReelForge +project_name: Pixelle-Video # ==================== LLM Configuration ==================== # Supports any OpenAI SDK compatible API diff --git a/docs/capabilities-guide.md b/docs/capabilities-guide.md index 6821800..ba6f4c5 100644 --- a/docs/capabilities-guide.md +++ b/docs/capabilities-guide.md @@ -1,10 +1,10 @@ -# ReelForge Capabilities Guide +# Pixelle-Video Capabilities Guide > Complete guide to using LLM, TTS, and Image generation capabilities ## Overview -ReelForge provides three core AI capabilities: +Pixelle-Video provides three core AI capabilities: - **LLM**: Text generation using LiteLLM (supports 100+ models) - **TTS**: Text-to-speech using Edge TTS (free, 400+ voices) - **Image**: Image generation using ComfyKit (local or cloud) @@ -12,16 +12,16 @@ ReelForge provides three core AI capabilities: ## Quick Start ```python -from reelforge.service import reelforge +from pixelle_video.service import pixelle_video # LLM - Generate text -answer = await reelforge.llm("Summarize 'Atomic Habits' in 3 sentences") +answer = await pixelle_video.llm("Summarize 'Atomic Habits' in 3 sentences") # TTS - Generate speech -audio_path = await reelforge.tts("Hello, world!") +audio_path = await pixelle_video.tts("Hello, world!") # Image - Generate images -image_url = await reelforge.image( +image_url = await pixelle_video.image( workflow="workflows/book_cover_simple.json", prompt="minimalist book cover design" ) @@ -62,10 +62,10 @@ llm: ```python # Basic usage -answer = await reelforge.llm("What is machine learning?") +answer = await pixelle_video.llm("What is machine learning?") # With parameters -answer = await reelforge.llm( +answer = await pixelle_video.llm( prompt="Explain atomic habits", temperature=0.7, # 0.0-2.0 (lower = more deterministic) max_tokens=2000 @@ -107,18 +107,18 @@ tts: ```python # Basic usage (auto-generates temp path) -audio_path = await reelforge.tts("Hello, world!") +audio_path = await pixelle_video.tts("Hello, world!") # Returns: "temp/abc123def456.mp3" # With Chinese text -audio_path = await reelforge.tts( +audio_path = await pixelle_video.tts( text="你好,世界!", voice="zh-CN-YunjianNeural" ) # With custom parameters -audio_path = await reelforge.tts( - text="Welcome to ReelForge", +audio_path = await pixelle_video.tts( + text="Welcome to Pixelle-Video", voice="en-US-JennyNeural", rate="+20%", # Speed: +50% = faster, -20% = slower volume="+0%", @@ -126,7 +126,7 @@ audio_path = await reelforge.tts( ) # Specify output path -audio_path = await reelforge.tts( +audio_path = await pixelle_video.tts( text="Hello", output_path="output/greeting.mp3" ) @@ -149,13 +149,13 @@ audio_path = await reelforge.tts( ```python # Get all available voices -voices = await reelforge.tts.list_voices() +voices = await pixelle_video.tts.list_voices() # Get Chinese voices only -voices = await reelforge.tts.list_voices(locale="zh-CN") +voices = await pixelle_video.tts.list_voices(locale="zh-CN") # Get English voices only -voices = await reelforge.tts.list_voices(locale="en-US") +voices = await pixelle_video.tts.list_voices(locale="en-US") ``` --- @@ -182,13 +182,13 @@ image: ```python # Basic usage (local ComfyUI) -image_url = await reelforge.image( +image_url = await pixelle_video.image( workflow="workflows/book_cover_simple.json", prompt="minimalist book cover design, blue and white" ) # With full parameters -image_url = await reelforge.image( +image_url = await pixelle_video.image( workflow="workflows/book_cover_simple.json", prompt="book cover for 'Atomic Habits', professional, minimalist", negative_prompt="ugly, blurry, low quality", @@ -199,13 +199,13 @@ image_url = await reelforge.image( ) # Using RunningHub cloud -image_url = await reelforge.image( +image_url = await pixelle_video.image( workflow="12345", # RunningHub workflow ID prompt="a beautiful landscape" ) # Check available workflows -workflows = reelforge.image.list_workflows() +workflows = pixelle_video.image.list_workflows() print(f"Available workflows: {workflows}") ``` @@ -221,7 +221,7 @@ export RUNNINGHUB_API_KEY="rh-key-xxx" ### Workflow DSL -ReelForge uses ComfyKit's DSL for workflow parameters: +Pixelle-Video uses ComfyKit's DSL for workflow parameters: ```json { @@ -252,27 +252,27 @@ Generate a complete book cover with narration: ```python import asyncio -from reelforge.service import reelforge +from pixelle_video.service import pixelle_video async def create_book_content(book_title, author): """Generate book summary, audio, and cover image""" # 1. Generate book summary with LLM - summary = await reelforge.llm( + summary = await pixelle_video.llm( prompt=f"Write a compelling 2-sentence summary for a book titled '{book_title}' by {author}", max_tokens=100 ) print(f"Summary: {summary}") # 2. Generate audio narration with TTS - audio_path = await reelforge.tts( + audio_path = await pixelle_video.tts( text=summary, voice="en-US-JennyNeural" ) print(f"Audio: {audio_path}") # 3. Generate book cover image - image_url = await reelforge.image( + image_url = await pixelle_video.image( workflow="workflows/book_cover_simple.json", prompt=f"book cover for '{book_title}' by {author}, professional, modern design", width=1024, @@ -339,5 +339,5 @@ result = asyncio.run(create_book_content("Atomic Habits", "James Clear")) --- -**Happy creating with ReelForge!** 📚🎬 +**Happy creating with Pixelle-Video!** 📚🎬 diff --git a/pixelle_video/__init__.py b/pixelle_video/__init__.py new file mode 100644 index 0000000..30df08d --- /dev/null +++ b/pixelle_video/__init__.py @@ -0,0 +1,26 @@ +""" +Pixelle-Video - AI-powered video generator + +Convention-based system with unified configuration management. + +Usage: + from pixelle_video import pixelle_video + + # Initialize + await pixelle_video.initialize() + + # Use capabilities + answer = await pixelle_video.llm("Explain atomic habits") + audio = await pixelle_video.tts("Hello world") + + # Generate video + result = await pixelle_video.generate_video(topic="AI in 2024") +""" + +from pixelle_video.service import PixelleVideoCore, pixelle_video +from pixelle_video.config import config_manager + +__version__ = "0.1.0" + +__all__ = ["PixelleVideoCore", "pixelle_video", "config_manager"] + diff --git a/reelforge/cli.py b/pixelle_video/cli.py similarity index 67% rename from reelforge/cli.py rename to pixelle_video/cli.py index 4c6e70f..6640eca 100644 --- a/reelforge/cli.py +++ b/pixelle_video/cli.py @@ -1,18 +1,18 @@ """ -ReelForge CLI +Pixelle-Video CLI """ import asyncio from loguru import logger -from reelforge.service import reelforge +from pixelle_video.service import pixelle_video async def test_llm(): """Test LLM capability""" - # Initialize reelforge - await reelforge.initialize() + # Initialize pixelle_video + await pixelle_video.initialize() # Test prompt prompt = "Explain the concept of atomic habits in 3 sentences." @@ -20,14 +20,14 @@ async def test_llm(): logger.info(f"\n📝 Test Prompt: {prompt}\n") # Call LLM - result = await reelforge.llm(prompt) + result = await pixelle_video.llm(prompt) logger.info(f"\n✨ Result:\n{result}\n") def main(): """Main CLI entry point""" - logger.info("🚀 ReelForge CLI\n") + logger.info("🚀 Pixelle-Video CLI\n") # Run test asyncio.run(test_llm()) diff --git a/reelforge/config/__init__.py b/pixelle_video/config/__init__.py similarity index 76% rename from reelforge/config/__init__.py rename to pixelle_video/config/__init__.py index 6540af2..06715dc 100644 --- a/reelforge/config/__init__.py +++ b/pixelle_video/config/__init__.py @@ -1,10 +1,10 @@ """ -ReelForge Configuration System +Pixelle-Video Configuration System Unified configuration management with Pydantic validation. Usage: - from reelforge.config import config_manager + from pixelle_video.config import config_manager # Access config (type-safe) api_key = config_manager.config.llm.api_key @@ -17,7 +17,7 @@ Usage: if config_manager.validate(): print("Config is valid!") """ -from .schema import ReelForgeConfig, LLMConfig, ComfyUIConfig, TTSSubConfig, ImageSubConfig +from .schema import PixelleVideoConfig, LLMConfig, ComfyUIConfig, TTSSubConfig, ImageSubConfig from .manager import ConfigManager from .loader import load_config_dict, save_config_dict @@ -25,7 +25,7 @@ from .loader import load_config_dict, save_config_dict config_manager = ConfigManager() __all__ = [ - "ReelForgeConfig", + "PixelleVideoConfig", "LLMConfig", "ComfyUIConfig", "TTSSubConfig", diff --git a/reelforge/config/loader.py b/pixelle_video/config/loader.py similarity index 100% rename from reelforge/config/loader.py rename to pixelle_video/config/loader.py diff --git a/reelforge/config/manager.py b/pixelle_video/config/manager.py similarity index 94% rename from reelforge/config/manager.py rename to pixelle_video/config/manager.py index 1d31cd1..1ab98fc 100644 --- a/reelforge/config/manager.py +++ b/pixelle_video/config/manager.py @@ -6,7 +6,7 @@ Provides unified access to configuration with automatic validation. from pathlib import Path from typing import Any, Optional from loguru import logger -from .schema import ReelForgeConfig +from .schema import PixelleVideoConfig from .loader import load_config_dict, save_config_dict @@ -29,13 +29,13 @@ class ConfigManager: return self.config_path = Path(config_path) - self.config: ReelForgeConfig = self._load() + self.config: PixelleVideoConfig = self._load() self._initialized = True - def _load(self) -> ReelForgeConfig: + def _load(self) -> PixelleVideoConfig: """Load configuration from file""" data = load_config_dict(str(self.config_path)) - return ReelForgeConfig(**data) + return PixelleVideoConfig(**data) def reload(self): """Reload configuration from file""" @@ -65,7 +65,7 @@ class ConfigManager: return base merged = deep_merge(current, updates) - self.config = ReelForgeConfig(**merged) + self.config = PixelleVideoConfig(**merged) def get(self, key: str, default: Any = None) -> Any: """Dict-like access (for backward compatibility)""" diff --git a/reelforge/config/schema.py b/pixelle_video/config/schema.py similarity index 93% rename from reelforge/config/schema.py rename to pixelle_video/config/schema.py index c0f6683..5b1ab6a 100644 --- a/reelforge/config/schema.py +++ b/pixelle_video/config/schema.py @@ -35,9 +35,9 @@ class ComfyUIConfig(BaseModel): image: ImageSubConfig = Field(default_factory=ImageSubConfig, description="Image-specific configuration") -class ReelForgeConfig(BaseModel): - """ReelForge main configuration""" - project_name: str = Field(default="ReelForge", description="Project name") +class PixelleVideoConfig(BaseModel): + """Pixelle-Video main configuration""" + project_name: str = Field(default="Pixelle-Video", description="Project name") llm: LLMConfig = Field(default_factory=LLMConfig) comfyui: ComfyUIConfig = Field(default_factory=ComfyUIConfig) diff --git a/reelforge/llm_presets.py b/pixelle_video/llm_presets.py similarity index 100% rename from reelforge/llm_presets.py rename to pixelle_video/llm_presets.py diff --git a/reelforge/models/progress.py b/pixelle_video/models/progress.py similarity index 100% rename from reelforge/models/progress.py rename to pixelle_video/models/progress.py diff --git a/reelforge/models/storyboard.py b/pixelle_video/models/storyboard.py similarity index 100% rename from reelforge/models/storyboard.py rename to pixelle_video/models/storyboard.py diff --git a/reelforge/prompts/README.md b/pixelle_video/prompts/README.md similarity index 94% rename from reelforge/prompts/README.md rename to pixelle_video/prompts/README.md index a1d5848..2e973a1 100644 --- a/reelforge/prompts/README.md +++ b/pixelle_video/prompts/README.md @@ -1,6 +1,6 @@ # Prompts Directory -Centralized prompt management for all LLM interactions in ReelForge. +Centralized prompt management for all LLM interactions in Pixelle-Video. ## Structure @@ -22,7 +22,7 @@ prompts/ All builder functions are exported from the package root: ```python -from reelforge.prompts import ( +from pixelle_video.prompts import ( build_topic_narration_prompt, build_content_narration_prompt, build_script_split_prompt, @@ -86,7 +86,7 @@ To add a new prompt: 3. Export the builder function in `__init__.py` 4. Use it in service code: ```python - from reelforge.prompts import build_my_new_prompt + from pixelle_video.prompts import build_my_new_prompt ``` ## Design Principles diff --git a/reelforge/prompts/__init__.py b/pixelle_video/prompts/__init__.py similarity index 60% rename from reelforge/prompts/__init__.py rename to pixelle_video/prompts/__init__.py index a4b1a48..df4cafb 100644 --- a/reelforge/prompts/__init__.py +++ b/pixelle_video/prompts/__init__.py @@ -5,17 +5,17 @@ Centralized prompt management for all LLM interactions. """ # Narration prompts -from reelforge.prompts.topic_narration import build_topic_narration_prompt -from reelforge.prompts.content_narration import build_content_narration_prompt -from reelforge.prompts.title_generation import build_title_generation_prompt +from pixelle_video.prompts.topic_narration import build_topic_narration_prompt +from pixelle_video.prompts.content_narration import build_content_narration_prompt +from pixelle_video.prompts.title_generation import build_title_generation_prompt # Image prompts -from reelforge.prompts.image_generation import ( +from pixelle_video.prompts.image_generation import ( build_image_prompt_prompt, IMAGE_STYLE_PRESETS, DEFAULT_IMAGE_STYLE ) -from reelforge.prompts.style_conversion import build_style_conversion_prompt +from pixelle_video.prompts.style_conversion import build_style_conversion_prompt __all__ = [ diff --git a/reelforge/prompts/content_narration.py b/pixelle_video/prompts/content_narration.py similarity index 100% rename from reelforge/prompts/content_narration.py rename to pixelle_video/prompts/content_narration.py diff --git a/reelforge/prompts/image_generation.py b/pixelle_video/prompts/image_generation.py similarity index 100% rename from reelforge/prompts/image_generation.py rename to pixelle_video/prompts/image_generation.py diff --git a/reelforge/prompts/style_conversion.py b/pixelle_video/prompts/style_conversion.py similarity index 100% rename from reelforge/prompts/style_conversion.py rename to pixelle_video/prompts/style_conversion.py diff --git a/reelforge/prompts/title_generation.py b/pixelle_video/prompts/title_generation.py similarity index 100% rename from reelforge/prompts/title_generation.py rename to pixelle_video/prompts/title_generation.py diff --git a/reelforge/prompts/topic_narration.py b/pixelle_video/prompts/topic_narration.py similarity index 100% rename from reelforge/prompts/topic_narration.py rename to pixelle_video/prompts/topic_narration.py diff --git a/reelforge/service.py b/pixelle_video/service.py similarity index 64% rename from reelforge/service.py rename to pixelle_video/service.py index 9a268bd..f422b6a 100644 --- a/reelforge/service.py +++ b/pixelle_video/service.py @@ -1,5 +1,5 @@ """ -ReelForge Core - Service Layer +Pixelle-Video Core - Service Layer Provides unified access to all capabilities (LLM, TTS, Image, etc.) """ @@ -8,40 +8,40 @@ from typing import Optional from loguru import logger -from reelforge.config import config_manager -from reelforge.services.llm_service import LLMService -from reelforge.services.tts_service import TTSService -from reelforge.services.image import ImageService -from reelforge.services.narration_generator import NarrationGeneratorService -from reelforge.services.image_prompt_generator import ImagePromptGeneratorService -from reelforge.services.title_generator import TitleGeneratorService -from reelforge.services.frame_processor import FrameProcessor -from reelforge.services.video_generator import VideoGeneratorService +from pixelle_video.config import config_manager +from pixelle_video.services.llm_service import LLMService +from pixelle_video.services.tts_service import TTSService +from pixelle_video.services.image import ImageService +from pixelle_video.services.narration_generator import NarrationGeneratorService +from pixelle_video.services.image_prompt_generator import ImagePromptGeneratorService +from pixelle_video.services.title_generator import TitleGeneratorService +from pixelle_video.services.frame_processor import FrameProcessor +from pixelle_video.services.video_generator import VideoGeneratorService -class ReelForgeCore: +class PixelleVideoCore: """ - ReelForge Core - Service Layer + Pixelle-Video Core - Service Layer Provides unified access to all capabilities. Usage: - from reelforge import reelforge + from pixelle_video import pixelle_video # Initialize - await reelforge.initialize() + await pixelle_video.initialize() # Use capabilities directly - answer = await reelforge.llm("Explain atomic habits") - audio = await reelforge.tts("Hello world") - image = await reelforge.image(prompt="a cat") + answer = await pixelle_video.llm("Explain atomic habits") + audio = await pixelle_video.tts("Hello world") + image = await pixelle_video.image(prompt="a cat") # Check active capabilities - print(f"Using LLM: {reelforge.llm.active}") - print(f"Available TTS: {reelforge.tts.available}") + print(f"Using LLM: {pixelle_video.llm.active}") + print(f"Available TTS: {pixelle_video.tts.available}") Architecture (Simplified): - ReelForgeCore (this class) + PixelleVideoCore (this class) ├── config (configuration) ├── llm (LLM service - direct OpenAI SDK) ├── tts (TTS service - ComfyKit workflows) @@ -50,7 +50,7 @@ class ReelForgeCore: def __init__(self, config_path: str = "config.yaml"): """ - Initialize ReelForge Core + Initialize Pixelle-Video Core Args: config_path: Path to configuration file @@ -82,13 +82,13 @@ class ReelForgeCore: This initializes all services and must be called before using any capabilities. Example: - await reelforge.initialize() + await pixelle_video.initialize() """ if self._initialized: - logger.warning("ReelForge already initialized") + logger.warning("Pixelle-Video already initialized") return - logger.info("🚀 Initializing ReelForge...") + logger.info("🚀 Initializing Pixelle-Video...") # 1. Initialize core services (no capability layer) self.llm = LLMService(self.config) @@ -107,18 +107,18 @@ class ReelForgeCore: self.generate_video = VideoGeneratorService(self) self._initialized = True - logger.info("✅ ReelForge initialized successfully\n") + logger.info("✅ Pixelle-Video initialized successfully\n") @property def project_name(self) -> str: """Get project name from config""" - return self.config.get("project_name", "ReelForge") + return self.config.get("project_name", "Pixelle-Video") def __repr__(self) -> str: """String representation""" status = "initialized" if self._initialized else "not initialized" - return f"