commit
This commit is contained in:
63
backend/app/services/flow_generator.py
Normal file
63
backend/app/services/flow_generator.py
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
import json
|
||||
from app.core.ai import ai_client
|
||||
from app.models.shot import Shot
|
||||
from app.models.scene import Scene
|
||||
|
||||
class FlowGeneratorService:
|
||||
async def generate_flow_json(self, shot: Shot, scene: Scene) -> dict:
|
||||
prompt = f"""
|
||||
You are a Virtual Cinematographer creating production instructions for Google Veo (Generative Video AI).
|
||||
|
||||
Generate a JSON configuration payload for the following shot.
|
||||
|
||||
CONTEXT:
|
||||
Scene Heading: {scene.slugline}
|
||||
Scene Description: {scene.raw_content}
|
||||
|
||||
SHOT DETAILS:
|
||||
Description: {shot.description}
|
||||
Additional Notes: {shot.llm_context_cache}
|
||||
|
||||
The JSON output should strictly follow this schema:
|
||||
{{
|
||||
"prompt": "Detailed visual description of the video to be generated...",
|
||||
"negative_prompt": "things to avoid...",
|
||||
"camera_movement": "string (e.g. pan left, zoom in, static)",
|
||||
"aspect_ratio": "16:9",
|
||||
"duration_seconds": 5
|
||||
}}
|
||||
|
||||
Enhance the 'prompt' field to be highly descriptive, visual, and suitable for a text-to-video model.
|
||||
Include lighting, style, and composition details based on the context.
|
||||
"""
|
||||
|
||||
json_str = await ai_client.generate_json(prompt)
|
||||
|
||||
try:
|
||||
return json.loads(json_str)
|
||||
except json.JSONDecodeError:
|
||||
raise ValueError("Failed to generate valid JSON from AI response")
|
||||
|
||||
async def refine_flow_json(self, current_json: dict, user_feedback: str) -> dict:
|
||||
prompt = f"""
|
||||
You are an AI Video Assistant.
|
||||
Update the following Google Veo JSON configuration based on the user's feedback.
|
||||
|
||||
CURRENT JSON:
|
||||
{json.dumps(current_json, indent=2)}
|
||||
|
||||
USER FEEDBACK:
|
||||
"{user_feedback}"
|
||||
|
||||
Return ONLY the updated JSON object. Do not wrap in markdown code blocks.
|
||||
"""
|
||||
|
||||
json_str = await ai_client.generate_json(prompt)
|
||||
|
||||
try:
|
||||
return json.loads(json_str)
|
||||
except json.JSONDecodeError:
|
||||
raise ValueError("Failed to refine JSON")
|
||||
|
||||
flow_generator = FlowGeneratorService()
|
||||
Reference in New Issue
Block a user