项目重命名: ReelForge => Pixelle-Video
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
ReelForge API Layer
|
||||
Pixelle-Video API Layer
|
||||
|
||||
FastAPI-based REST API for video generation services.
|
||||
"""
|
||||
|
||||
24
api/app.py
24
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}
|
||||
|
||||
@@ -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)]
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user