- 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>
107 lines
4.2 KiB
Python
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()
|