This commit is contained in:
2026-01-27 17:40:37 +01:00
parent 82947a7bd6
commit adc2cd572a
55 changed files with 4145 additions and 101 deletions

View File

@@ -0,0 +1,57 @@
import json
from app.core.ai import ai_client
from app.schemas.script import ScriptAnalysisResponse
class ScriptParserService:
async def parse_script(self, text_content: str) -> ScriptAnalysisResponse:
prompt = f"""
You are an expert Assistant Director and Script Supervisor.
Analyze the following screenplay text and break it down into Scenes and Shots.
For each Scene, identify:
- Scene Number (if present, or incrementing)
- Heading (INT./EXT. LOCATION - DAY/NIGHT)
- Brief Description of what happens
For each Scene, break the action down into a list of Shots (Camera setups).
For each Shot, provide:
- Shot Number (e.g. 1, 1A, etc)
- Description of the action in the shot
- Visual Notes (Camera angles, movement if implied)
- Dialogue (if any covers this shot)
Output MUST be a valid JSON object matching this structure:
{{
"scenes": [
{{
"scene_number": "1",
"heading": "INT. OFFICE - DAY",
"description": "John sits at his desk.",
"shots": [
{{
"shot_number": "1A",
"description": "Wide shot of John at desk.",
"visual_notes": "Static",
"dialogue": null
}}
]
}}
]
}}
SCRIPT TEXT:
{text_content}
"""
json_str = await ai_client.generate_json(prompt)
# Parse JSON and validate with Pydantic
try:
data = json.loads(json_str)
return ScriptAnalysisResponse(**data)
except json.JSONDecodeError:
# Fallback or retry logic could go here
raise ValueError("Failed to parse LLM response as JSON")
parser_service = ScriptParserService()