ai_qc/backend/visual_qc_apps/amazon_required_elements/app.py
nickviljoen 9b40ad0e77 Equalize Amazon profile weights and refine QC check prompts
Adjusted all 6 Amazon check weights to equal 1.67 each based on test
results showing incorrect scoring. Refined prompts for box placement
(format-aware positioning, better tape description), required elements
(subhead now optional for OOH), logo country (country match as primary
factor), margins (visual assessment over pixel estimates), and headline
layout (natural language break detection, tall format awareness).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:07:06 +02:00

82 lines
4.3 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 AmazonRequiredElementsApp(FlaskAppTemplate):
"""
Amazon ASD 2025 - Required Elements Check
Verifies all mandatory layout elements are present in the design.
"""
def __init__(self):
prompt = """You are performing a visual quality-control check on an Amazon marketing asset. Your task is to verify that all required layout elements are present in the design.
AMAZON REQUIRED ELEMENTS:
Amazon marketing layouts contain the following elements:
CRITICAL ELEMENTS (must be present — absence is a major issue):
1. HEADLINE - The main promotional text (e.g. "Four days of big deals", sale messaging). This should be the largest and most prominent text element in the layout. It is always left-aligned.
2. BOX - The Amazon branded box graphic that contains the Amazon logo (or URL logo for emerging locales). This is a distinctive cardboard box shape with tape/flaps. In some display formats, a Paper Bag may be used instead of the Box.
IMPORTANT ELEMENTS (should be present in most formats):
3. DATE - The sale dates/timing information (e.g. "8-11 July", "8-11 luglio"). Usually positioned below or near the headline.
4. LEGAL LINE - Small disclaimer/legal text, typically at the bottom of the layout (e.g. "Exclusively for Prime members", "Solo per i clienti Prime"). Usually displayed in smaller, semi-transparent text.
OPTIONAL ELEMENT (nice to have, but NOT required for all formats):
5. SUBHEAD - Secondary text providing additional context (e.g. discount percentage, "Save up to XX%", additional promotional messaging). This is separate from the date.
- IMPORTANT: Many formats — especially OOH (Out of Home), DOOH, and simplified layouts — do NOT include a separate subhead. This is perfectly acceptable. The date text or campaign branding can serve as the secondary text element.
- Do NOT penalise an asset for missing a subhead if the layout otherwise contains a headline, box, date, and legal line.
- Only flag a missing subhead as a minor note, never as a primary reason for failure.
EXCEPTIONS FOR SMALL FORMATS:
- For very small formats (typically below 60 pixels in height), the layout may be reduced to just: Headline and Box/logo only. This is acceptable.
- For banners where one side is smaller than 49 pixels, the Amazon logo (white) may appear without the box.
ADDITIONAL ELEMENTS (not required but note if present):
- CTA (Call-to-Action) button - Used in digital display formats only.
- ASINs (product images) - Used in certain layouts only.
- Campaign branding text (e.g. "Prime Day", "amazon prime day") - Often appears near the bottom.
STEPS TO EVALUATE:
1. Scan the entire layout and identify each element present
2. Determine if this is a standard format or a small format
3. For standard formats: verify the CRITICAL elements (Headline, Box) and IMPORTANT elements (Date, Legal Line) are present
4. Note whether a subhead is present, but do not treat its absence as a failure
5. For small formats: verify at minimum the Headline and Box/logo are present
DECISION CRITERIA:
- PASS: Headline AND Box are present, plus Date and Legal Line are present in standard formats
- FAIL: Headline is missing, OR Box/logo is missing in a standard format
- MINOR ISSUES (reduce score slightly but do not fail): Date missing, Legal Line missing, or Subhead missing
YOUR OUTPUT:
Format your response as JSON:
{
"element_check": "Pass" or "Fail",
"format_type": "standard" or "small" or "OOH/DOOH",
"elements_found": {
"headline": true or false,
"box_or_logo": true or false,
"subhead": true or false,
"date": true or false,
"legal_line": true or false
},
"missing_elements": ["list of missing elements, empty array if none"],
"missing_severity": "critical" or "minor" or "none",
"additional_elements_found": ["CTA", "ASINs", "campaign branding", etc.],
"explanation": "Detailed description of what was found and any concerns",
"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 = AmazonRequiredElementsApp()
app_instance.run()