ai_qc/backend/visual_qc_apps/video_pacing_flow/app.py
nickviljoen 20259dcad0 Add Honda client, video QC, session refresh, Amazon check tuning
- Add Honda client with static_general and video_general profiles
- Add video QC capability using Gemini native video analysis (4 checks:
  visual_quality, brand_consistency, text_legibility, pacing_flow)
- Add video_general profile assigned to all 8 clients
- Extend session lifetime with MSAL silent token refresh (proactive
  every 45min + reactive on expiry), switch cache to localStorage
- Re-enable OCR layout measurements for Amazon checks
- Add scope boundary notes to all 6 Amazon checks to prevent cross-
  check penalization (locale errors isolated to logo_country only)
- Relax margins left-alignment tolerance from 1% to 4% to account
  for logo lockup internal padding
- Update brand guidelines DB with Amazon localization matrix and
  processed Dove PDF summary

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 14:53:52 +02:00

107 lines
4.2 KiB
Python

import os
import sys
# Add parent directory to path to import shared modules
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
from visual_qc_apps.flask_app_template import FlaskAppTemplate
class VideoPacingFlowApp(FlaskAppTemplate):
"""
Video QC - Pacing & Flow Check
Evaluates the video's pacing, transitions, scene structure, and overall
narrative/visual flow for marketing effectiveness.
"""
def __init__(self):
prompt = """You are performing a pacing and flow quality-control check on a VIDEO marketing asset. You are watching the full video — evaluate the overall structure, pacing, and flow across its entire duration.
VIDEO PACING & FLOW EVALUATION:
Evaluate the following aspects of the video's structure and flow:
1. OPENING / HOOK:
- Does the video have a strong opening that captures attention?
- Is the key message or brand introduced within the first few seconds?
- For social media content: is the hook immediate (first 1-3 seconds)?
2. PACING:
- Is the overall pace appropriate for the content type and platform?
- Are scenes/shots an appropriate duration — not too long (boring) or too short (disorienting)?
- Does the pacing maintain viewer engagement throughout?
- Are there any dead spots or unnecessarily slow sections?
3. TRANSITIONS:
- Are scene transitions smooth and professional?
- Are transition effects consistent in style throughout?
- Are there any jarring or abrupt cuts that feel unintentional?
- Do transitions serve the narrative or feel gratuitous?
4. SCENE STRUCTURE:
- Does the video follow a logical structure (beginning, middle, end)?
- Is the key message clear and communicated effectively?
- Are there any scenes that feel out of place or unnecessary?
- Is the video an appropriate length for its content and intended platform?
5. CLOSING / CTA:
- Does the video have a clear and intentional ending?
- Does it end with a call-to-action, brand moment, or memorable closing?
- Does the ending feel complete (not abrupt or cut short)?
- Is there an adequate pause on the final frame before the video ends?
STEPS TO EVALUATE:
1. Watch the full video noting the overall structure and pacing
2. Assess whether the opening grabs attention
3. Check if pacing maintains engagement or has dead spots
4. Evaluate transitions for smoothness and consistency
5. Assess the closing for completeness and brand presence
6. Consider the overall viewer experience from start to finish
DECISION CRITERIA:
- PASS (score 7-10): Well-paced, engaging from start to finish, smooth transitions, clear structure with strong opening and closing
- MODERATE ISSUES (score 4-6): Generally acceptable pacing but with some slow sections, inconsistent transitions, or a weak opening/closing
- FAIL (score 1-3): Poor pacing — disengaging, jarring transitions, no clear structure, abrupt ending, or video feels incomplete
YOUR OUTPUT:
Format your response as JSON:
{
"pacing_flow_check": "Pass" or "Fail",
"opening": {
"attention_grabbing": true or false,
"brand_intro_timing": "Immediate (1-3s)" or "Early (3-5s)" or "Mid" or "Late" or "Not present",
"notes": "Details"
},
"pacing": {
"overall_pace": "Well-paced" or "Slightly slow" or "Slightly fast" or "Uneven" or "Too slow" or "Too fast",
"dead_spots": true or false,
"engagement_maintained": true or false,
"notes": "Details"
},
"transitions": {
"quality": "Smooth" or "Mostly smooth" or "Jarring",
"consistency": "Consistent" or "Inconsistent",
"notes": "Details"
},
"structure": {
"logical_flow": true or false,
"key_message_clear": true or false,
"appropriate_length": true or false,
"notes": "Details"
},
"closing": {
"clear_ending": true or false,
"cta_or_brand_moment": true or false,
"adequate_final_frame": true or false,
"notes": "Details"
},
"estimated_duration": "Approximate video duration",
"explanation": "Detailed reasoning for the overall assessment",
"recommendations": ["List specific recommendations if applicable, else an empty array"]
}"""
super().__init__(__name__, prompt)
# Run the app if executed directly
if __name__ == "__main__":
app_instance = VideoPacingFlowApp()
app_instance.run()