diff --git a/.gitignore b/.gitignore index c564423..ac46ac2 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ backend/campaigns/ # Demo before/after renders (regenerated by demo_runner.py) backend/demo_out/ + +# Static web demo build (npm run build:demo) +web-dist/ diff --git a/README.md b/README.md index 42e9de0..b556ddf 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ Pixel runs a gaze model over an ad, finds what is pulling the eye away from the brand, and has a team of AI agents redesign it. Every edit is re-scored by the gaze model, and edits that don't raise the score are thrown out.
-
+ 
+ Try the demo
Built in one day at Multimodal Hacks (NY Tech Week, June 6 2026) with Rishi Shah.
@@ -85,6 +86,8 @@ npm run dev # http://localhost:5173 Keys go in git-ignored files: `GEMINI_API_KEY`, `PINECONE_API_KEY` and `PINECONE_INDEX` in `backend/.env`, and `VITE_CLERK_PUBLISHABLE_KEY` in `frontend/.env.local`. Seed the competitor index once with `python backend/pinecone_seed.py`. Without a Gemini key the app still analyzes ads, but edits come back unchanged. DeepGaze runs on the GPU when there is one and on the CPU otherwise. +The [live demo](https://sparkylab.web.app/pixel/) is the same frontend replaying runs recorded on the real backend, so it needs no server and no keys. `python scripts/record_demo.py` records them and `npm run build:demo` in `frontend` writes the static site to `web-dist/`. + To rebuild the figures in this README: ```bash diff --git a/frontend/package.json b/frontend/package.json index 0f2165d..10a983a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "vite", "build": "vite build", + "build:demo": "vite build --mode demo", "preview": "vite preview" }, "dependencies": { diff --git a/frontend/public/replay/apple/heat.png b/frontend/public/replay/apple/heat.png new file mode 100644 index 0000000..a41aa56 Binary files /dev/null and b/frontend/public/replay/apple/heat.png differ diff --git a/frontend/public/replay/apple/image.jpg b/frontend/public/replay/apple/image.jpg new file mode 100644 index 0000000..ad90b0e Binary files /dev/null and b/frontend/public/replay/apple/image.jpg differ diff --git a/frontend/public/replay/apple/predict.json b/frontend/public/replay/apple/predict.json new file mode 100644 index 0000000..42e7a5a --- /dev/null +++ b/frontend/public/replay/apple/predict.json @@ -0,0 +1,61 @@ +{ + "width": 1400, + "height": 2100, + "attention_score": 0.7581, + "heatmap_png": "replay/apple/heat.png", + "target_box": [ + 0.32, + 0.2, + 0.36, + 0.62 + ], + "scanpath": [ + { + "x": 0.484, + "y": 0.371, + "order": 1 + }, + { + "x": 0.523, + "y": 0.634, + "order": 2 + }, + { + "x": 0.478, + "y": 0.942, + "order": 3 + }, + { + "x": 0.521, + "y": 0.511, + "order": 4 + }, + { + "x": 0.158, + "y": 0.489, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.3809, + 0.8443, + 0.2, + 0.2 + ], + "share": 0.09, + "desc": "Smartwatch band" + }, + { + "region": [ + 0.0, + 0.3912, + 0.2, + 0.2 + ], + "share": 0.027, + "desc": "Abstract blurred image" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/apple/step0-heat.png b/frontend/public/replay/apple/step0-heat.png new file mode 100644 index 0000000..d37f6bd Binary files /dev/null and b/frontend/public/replay/apple/step0-heat.png differ diff --git a/frontend/public/replay/apple/step0.jpg b/frontend/public/replay/apple/step0.jpg new file mode 100644 index 0000000..e33977e Binary files /dev/null and b/frontend/public/replay/apple/step0.jpg differ diff --git a/frontend/public/replay/apple/step1-heat.png b/frontend/public/replay/apple/step1-heat.png new file mode 100644 index 0000000..1982d93 Binary files /dev/null and b/frontend/public/replay/apple/step1-heat.png differ diff --git a/frontend/public/replay/apple/step1.jpg b/frontend/public/replay/apple/step1.jpg new file mode 100644 index 0000000..2362331 Binary files /dev/null and b/frontend/public/replay/apple/step1.jpg differ diff --git a/frontend/public/replay/apple/step2-heat.png b/frontend/public/replay/apple/step2-heat.png new file mode 100644 index 0000000..3ee5963 Binary files /dev/null and b/frontend/public/replay/apple/step2-heat.png differ diff --git a/frontend/public/replay/apple/step2.jpg b/frontend/public/replay/apple/step2.jpg new file mode 100644 index 0000000..4509ccd Binary files /dev/null and b/frontend/public/replay/apple/step2.jpg differ diff --git a/frontend/public/replay/apple/step3-heat.png b/frontend/public/replay/apple/step3-heat.png new file mode 100644 index 0000000..0e34d7d Binary files /dev/null and b/frontend/public/replay/apple/step3-heat.png differ diff --git a/frontend/public/replay/apple/step3.jpg b/frontend/public/replay/apple/step3.jpg new file mode 100644 index 0000000..e1f36aa Binary files /dev/null and b/frontend/public/replay/apple/step3.jpg differ diff --git a/frontend/public/replay/apple/steps.json b/frontend/public/replay/apple/steps.json new file mode 100644 index 0000000..d36d415 --- /dev/null +++ b/frontend/public/replay/apple/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Apple logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Apple logo and product", + "variant_png": "replay/apple/step0.jpg", + "current_score": 0.7581, + "new_score": 0.6945, + "delta": -0.0636, + "target_salience_before": 0.6983, + "target_salience_after": 0.5065, + "judge": 0.8, + "judge_reason": "The creative exhibits strong brand-fit for Apple in terms of its aesthetic, messaging, and overall feel. The minimalist composition, aspirational slogan ('Experience More'), and clear call to action ('Learn More') are all characteristic of Apple's advertising. The imagery of the floating iPhone above a hand with an Apple Watch subtly highlights the ecosystem and a sense of effortless interaction or wonder. The photography quality and typography also align well with Apple's premium brand image. The main factor reducing a perfect score is the use of an iPhone X, which is an older model; current Apple ads almost exclusively feature their latest hardware. However, if this ad were created when the iPhone X was current, it would be an excellent example of an Apple campaign.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/apple/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Apple logo and product as a strong, high-contrast focal point", + "variant_png": "replay/apple/step1.jpg", + "current_score": 0.7581, + "new_score": 0.6853, + "delta": -0.0728, + "target_salience_before": 0.6983, + "target_salience_after": 0.4851, + "judge": 0.6, + "judge_reason": "The ad features core Apple products (iPhone, Apple Watch, logo) and a relevant tagline 'CAPTURE YOUR WORLD' with a clear call to action, aligning with a key iPhone feature (camera). The composition is clean and the lighting is natural. However, it's unlikely to run as a real Apple ad due to several factors: the iPhone model appears to be an older generation (likely an iPhone X), whereas Apple typically features its latest models prominently in new campaigns. The concept of a levitating phone, while common in tech ads, lacks the unique, minimalist, and often more abstract or experiential creativity typically associated with official Apple campaigns. Furthermore, the overall production quality, while decent, doesn't quite reach the hyper-polished, studio-level photography and precise typography standards Apple is known for.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/apple/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Apple logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/apple/step2.jpg", + "current_score": 0.7581, + "new_score": 0.7858, + "delta": 0.0277, + "target_salience_before": 0.6983, + "target_salience_after": 0.8174, + "judge": 0.3, + "judge_reason": "This creative attempts to capture Apple's focus on user experience, using a clean font and the iconic logo. However, several factors make it unlikely to run as a real Apple ad: \n1. **Outdated Product:** The ad features an iPhone X, which is an older model. Apple typically highlights its latest products in primary ad campaigns.\n2. **Quality & Polish:** The 'floating' effect and the glow around the phone appear somewhat amateurish and not seamlessly integrated. Apple ads are known for their extremely high production value, precision, and minimalist perfection, which this creative doesn't quite achieve.\n3. **Generic Message:** While 'EXPERIENCE' is a core tenet of Apple's brand, a single, broad word like this is often too generic for a standalone ad creative. Apple usually pairs its general ethos with specific features, innovations, or emotional benefits ('Privacy. That's iPhone,' 'Shot on iPhone,' 'The new way to interact with your phone').\n4. **Background:** The blurred background, while aiming for a lifestyle feel, lacks the distinctive or aspirational quality typical of Apple's curated environmental shots or their signature clean, often studio-like aesthetic.\n5. **Brand Fit (Aesthetics):** While the Apple logo and text font are on-brand, the overall execution lacks the sophisticated, premium feel Apple meticulously maintains in its advertising.", + "vetoed": true, + "guard": "accept", + "guard_reasons": [ + "perceptible, localized/justified, and target salience improved" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/apple/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Apple logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/apple/step3.jpg", + "current_score": 0.7581, + "new_score": 0.7711, + "delta": 0.013, + "target_salience_before": 0.6983, + "target_salience_after": 0.7506, + "judge": 0.9, + "judge_reason": "This creative demonstrates strong brand-fit for Apple. The minimalist aesthetic, featuring a clean product shot against a plain background, is a hallmark of Apple's advertising. The typography is simple and elegant, and the concise tagline 'CAPTURE THE MOMENT' directly highlights a key iPhone feature (the camera) and a core user benefit, aligning perfectly with Apple's benefit-driven messaging. While the phone is an older model (iPhone X/XS era), if evaluated within its historical context, the quality of the image and the clarity of the text are high. It's a straightforward, effective, and visually consistent ad that Apple would very likely run to promote the iPhone's camera capabilities.", + "vetoed": false, + "guard": "accept", + "guard_reasons": [ + "perceptible, localized/justified, and target salience improved" + ], + "improved": true, + "n_directives": 8, + "variant_heatmap": "replay/apple/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/apple/thumb.jpg b/frontend/public/replay/apple/thumb.jpg new file mode 100644 index 0000000..626a225 Binary files /dev/null and b/frontend/public/replay/apple/thumb.jpg differ diff --git a/frontend/public/replay/coca-cola/heat.png b/frontend/public/replay/coca-cola/heat.png new file mode 100644 index 0000000..13467f7 Binary files /dev/null and b/frontend/public/replay/coca-cola/heat.png differ diff --git a/frontend/public/replay/coca-cola/image.jpg b/frontend/public/replay/coca-cola/image.jpg new file mode 100644 index 0000000..bbd967a Binary files /dev/null and b/frontend/public/replay/coca-cola/image.jpg differ diff --git a/frontend/public/replay/coca-cola/predict.json b/frontend/public/replay/coca-cola/predict.json new file mode 100644 index 0000000..d67a37a --- /dev/null +++ b/frontend/public/replay/coca-cola/predict.json @@ -0,0 +1,61 @@ +{ + "width": 1600, + "height": 2000, + "attention_score": 0.8026, + "heatmap_png": "replay/coca-cola/heat.png", + "target_box": [ + 0.33, + 0.28, + 0.33, + 0.64 + ], + "scanpath": [ + { + "x": 0.429, + "y": 0.605, + "order": 1 + }, + { + "x": 0.532, + "y": 0.426, + "order": 2 + }, + { + "x": 0.496, + "y": 0.767, + "order": 3 + }, + { + "x": 0.53, + "y": 0.999, + "order": 4 + }, + { + "x": 0.495, + "y": 0.318, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.4299, + 0.899, + 0.2, + 0.2 + ], + "share": 0.073, + "desc": "Wet soda can top" + }, + { + "region": [ + 0.4397, + 0.8346, + 0.2, + 0.2 + ], + "share": 0.11, + "desc": "Wet soda can body" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/coca-cola/step0-heat.png b/frontend/public/replay/coca-cola/step0-heat.png new file mode 100644 index 0000000..0ad0447 Binary files /dev/null and b/frontend/public/replay/coca-cola/step0-heat.png differ diff --git a/frontend/public/replay/coca-cola/step0.jpg b/frontend/public/replay/coca-cola/step0.jpg new file mode 100644 index 0000000..d933982 Binary files /dev/null and b/frontend/public/replay/coca-cola/step0.jpg differ diff --git a/frontend/public/replay/coca-cola/step1-heat.png b/frontend/public/replay/coca-cola/step1-heat.png new file mode 100644 index 0000000..6e2f61d Binary files /dev/null and b/frontend/public/replay/coca-cola/step1-heat.png differ diff --git a/frontend/public/replay/coca-cola/step1.jpg b/frontend/public/replay/coca-cola/step1.jpg new file mode 100644 index 0000000..584f1fa Binary files /dev/null and b/frontend/public/replay/coca-cola/step1.jpg differ diff --git a/frontend/public/replay/coca-cola/step2-heat.png b/frontend/public/replay/coca-cola/step2-heat.png new file mode 100644 index 0000000..4fb22e2 Binary files /dev/null and b/frontend/public/replay/coca-cola/step2-heat.png differ diff --git a/frontend/public/replay/coca-cola/step2.jpg b/frontend/public/replay/coca-cola/step2.jpg new file mode 100644 index 0000000..ac8ed34 Binary files /dev/null and b/frontend/public/replay/coca-cola/step2.jpg differ diff --git a/frontend/public/replay/coca-cola/step3-heat.png b/frontend/public/replay/coca-cola/step3-heat.png new file mode 100644 index 0000000..6459b69 Binary files /dev/null and b/frontend/public/replay/coca-cola/step3-heat.png differ diff --git a/frontend/public/replay/coca-cola/step3.jpg b/frontend/public/replay/coca-cola/step3.jpg new file mode 100644 index 0000000..330f8ea Binary files /dev/null and b/frontend/public/replay/coca-cola/step3.jpg differ diff --git a/frontend/public/replay/coca-cola/steps.json b/frontend/public/replay/coca-cola/steps.json new file mode 100644 index 0000000..66e6ec0 --- /dev/null +++ b/frontend/public/replay/coca-cola/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Coca-Cola logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Coca-Cola logo and product", + "variant_png": "replay/coca-cola/step0.jpg", + "current_score": 0.8026, + "new_score": 0.5641, + "delta": -0.2385, + "target_salience_before": 0.8585, + "target_salience_after": 0.2733, + "judge": 0.98, + "judge_reason": "This Coca-Cola ad creative is exceptionally high quality and demonstrates outstanding brand-fit. The photography of the can is professional, showcasing the product with appealing condensation that conveys extreme coldness and refreshment. The vibrant red background is the iconic Coca-Cola color, instantly recognizable. Both taglines, 'REFRESH YOUR MOMENT' and especially 'TASTE THE FEELING.' (which is Coca-Cola's actual global marketing tagline since 2016), are perfectly aligned with the brand's messaging of refreshment, experience, and emotional connection. The composition is clean, direct, and impactful, making the product the clear hero. This creative would absolutely run as a real ad; it embodies the quintessential Coca-Cola brand aesthetic and message.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/coca-cola/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Coca-Cola logo and product as a strong, high-contrast focal point", + "variant_png": "replay/coca-cola/step1.jpg", + "current_score": 0.8026, + "new_score": 0.5539, + "delta": -0.2487, + "target_salience_before": 0.8585, + "target_salience_after": 0.2623, + "judge": 0.9, + "judge_reason": "This creative is highly effective and demonstrates strong brand fit for Coca-Cola. The use of the iconic red background, a perfectly photographed cold can with condensation, and the prominent display of the Coca-Cola logo immediately establish brand identity. The headline 'REFRESH YOUR MOMENT' aligns perfectly with Coca-Cola's core messaging around refreshment and experience. The tagline 'TASTE THE FEELING. BUY NOW.' directly incorporates a well-known global Coca-Cola campaign tagline ('Taste the Feeling') and a clear call to action. While the headline font isn't the classic Coca-Cola Spencerian script, it's a stylistic choice that doesn't detract from the brand's essence, and the overall composition is clean, direct, and professional. This ad would very likely run as a real ad in various formats (digital, print, in-store) due to its clarity, strong branding, and direct appeal.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/coca-cola/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Coca-Cola logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/coca-cola/step2.jpg", + "current_score": 0.8026, + "new_score": 0.6652, + "delta": -0.1374, + "target_salience_before": 0.8585, + "target_salience_after": 0.4196, + "judge": 1.0, + "judge_reason": "This Coca-Cola ad creative is exceptionally high quality and a perfect brand fit. The image features a perfectly rendered, condensation-laden Coca-Cola can against an iconic red background, immediately evoking refreshment. The use of the official global campaign tagline, 'TASTE THE FEELING,' further solidifies its authenticity and brand alignment. The minimalist yet powerful composition is characteristic of Coca-Cola's advertising, making it highly effective and absolutely suitable to run as a real ad.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/coca-cola/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Coca-Cola logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/coca-cola/step3.jpg", + "current_score": 0.8026, + "new_score": 0.6691, + "delta": -0.1335, + "target_salience_before": 0.8585, + "target_salience_after": 0.427, + "judge": 1.0, + "judge_reason": "This creative is of excellent quality and perfectly aligns with the Coca-Cola brand. The vibrant red background, the perfectly chilled can with condensation, and the iconic 'Taste the Feeling' tagline are all quintessential Coca-Cola. The photography/rendering is professional and appealing, making the product look refreshing. The minimalist composition focuses entirely on the product and brand message. This would undoubtedly run as a real ad, fitting seamlessly into their established advertising aesthetic.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/coca-cola/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/coca-cola/thumb.jpg b/frontend/public/replay/coca-cola/thumb.jpg new file mode 100644 index 0000000..f828513 Binary files /dev/null and b/frontend/public/replay/coca-cola/thumb.jpg differ diff --git a/frontend/public/replay/manifest.json b/frontend/public/replay/manifest.json new file mode 100644 index 0000000..ee11f7c --- /dev/null +++ b/frontend/public/replay/manifest.json @@ -0,0 +1,15 @@ +{ + "recorded": "2026-10-01", + "engine": "deepgaze-iie", + "device": "cuda", + "samples": [ + "apple", + "coca-cola", + "mcdonalds", + "nike", + "pepsi", + "red-bull", + "spotify", + "the-ordinary" + ] +} \ No newline at end of file diff --git a/frontend/public/replay/mcdonalds/heat.png b/frontend/public/replay/mcdonalds/heat.png new file mode 100644 index 0000000..cac9648 Binary files /dev/null and b/frontend/public/replay/mcdonalds/heat.png differ diff --git a/frontend/public/replay/mcdonalds/image.jpg b/frontend/public/replay/mcdonalds/image.jpg new file mode 100644 index 0000000..7c115bb Binary files /dev/null and b/frontend/public/replay/mcdonalds/image.jpg differ diff --git a/frontend/public/replay/mcdonalds/predict.json b/frontend/public/replay/mcdonalds/predict.json new file mode 100644 index 0000000..a24b4ac --- /dev/null +++ b/frontend/public/replay/mcdonalds/predict.json @@ -0,0 +1,40 @@ +{ + "width": 1600, + "height": 1600, + "attention_score": 0.8383, + "heatmap_png": "replay/mcdonalds/heat.png", + "target_box": [ + 0.26, + 0.31, + 0.52, + 0.33 + ], + "scanpath": [ + { + "x": 0.354, + "y": 0.557, + "order": 1 + }, + { + "x": 0.618, + "y": 0.551, + "order": 2 + }, + { + "x": 0.512, + "y": 0.551, + "order": 3 + }, + { + "x": 0.724, + "y": 0.547, + "order": 4 + }, + { + "x": 0.458, + "y": 0.355, + "order": 5 + } + ], + "distractors": [] +} \ No newline at end of file diff --git a/frontend/public/replay/mcdonalds/step0-heat.png b/frontend/public/replay/mcdonalds/step0-heat.png new file mode 100644 index 0000000..077d1a2 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step0-heat.png differ diff --git a/frontend/public/replay/mcdonalds/step0.jpg b/frontend/public/replay/mcdonalds/step0.jpg new file mode 100644 index 0000000..bfe5d37 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step0.jpg differ diff --git a/frontend/public/replay/mcdonalds/step1-heat.png b/frontend/public/replay/mcdonalds/step1-heat.png new file mode 100644 index 0000000..ea17123 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step1-heat.png differ diff --git a/frontend/public/replay/mcdonalds/step1.jpg b/frontend/public/replay/mcdonalds/step1.jpg new file mode 100644 index 0000000..6126c21 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step1.jpg differ diff --git a/frontend/public/replay/mcdonalds/step2-heat.png b/frontend/public/replay/mcdonalds/step2-heat.png new file mode 100644 index 0000000..77edc19 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step2-heat.png differ diff --git a/frontend/public/replay/mcdonalds/step2.jpg b/frontend/public/replay/mcdonalds/step2.jpg new file mode 100644 index 0000000..ac05f63 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step2.jpg differ diff --git a/frontend/public/replay/mcdonalds/step3-heat.png b/frontend/public/replay/mcdonalds/step3-heat.png new file mode 100644 index 0000000..7598108 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step3-heat.png differ diff --git a/frontend/public/replay/mcdonalds/step3.jpg b/frontend/public/replay/mcdonalds/step3.jpg new file mode 100644 index 0000000..87850a5 Binary files /dev/null and b/frontend/public/replay/mcdonalds/step3.jpg differ diff --git a/frontend/public/replay/mcdonalds/steps.json b/frontend/public/replay/mcdonalds/steps.json new file mode 100644 index 0000000..0623768 --- /dev/null +++ b/frontend/public/replay/mcdonalds/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the McDonald's logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the McDonald's logo and product", + "variant_png": "replay/mcdonalds/step0.jpg", + "current_score": 0.8383, + "new_score": 0.7213, + "delta": -0.117, + "target_salience_before": 0.8893, + "target_salience_after": 0.4438, + "judge": 0.95, + "judge_reason": "This is a high-quality, brand-fit creative that would absolutely run as a real ad for McDonald's. The visual of the illuminated Golden Arches against a dark, night sky immediately sets the scene for 'late night.' The copy 'LATE NIGHT CRAVINGS? FIND YOURS. ALWAYS OPEN' is concise, directly addresses a common consumer need, and highlights a key brand strength (convenience/extended hours). The use of the iconic McDonald's colors (yellow and red) is strong, and the overall composition is impactful and clear. The Japanese text on the sign adds a subtle touch of global authenticity without detracting from the universal message. It's a very effective ad.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/mcdonalds/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the McDonald's logo and product as a strong, high-contrast focal point", + "variant_png": "replay/mcdonalds/step1.jpg", + "current_score": 0.8383, + "new_score": 0.7412, + "delta": -0.0971, + "target_salience_before": 0.8893, + "target_salience_after": 0.4911, + "judge": 0.85, + "judge_reason": "This creative has strong brand recognition and a clear message. The iconic golden arches and McDonald's logo (with Japanese 'drive-thru' text) are instantly identifiable. The 'ALWAYS OPEN' headline perfectly aligns with McDonald's messaging of convenience and availability, especially for late-night or early-morning customers. 'ORDER NOW' provides a direct call to action. The use of McDonald's brand colors (yellow, red, against a dark background) makes the sign pop. While the photographic quality of the sign itself appears somewhat raw or weathered (which some campaigns might embrace for authenticity, others might polish), and the 'ALWAYS OPEN' text is digitally overlaid, the core elements are effective and on-brand. It's highly likely this could run as a real ad, particularly for digital channels, social media, or localized campaigns emphasizing convenience.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/mcdonalds/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the McDonald's logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/mcdonalds/step2.jpg", + "current_score": 0.8383, + "new_score": 0.7827, + "delta": -0.0556, + "target_salience_before": 0.8893, + "target_salience_after": 0.6177, + "judge": 0.9, + "judge_reason": "This creative has excellent brand fit and high quality. The iconic McDonald's golden arches and logotype are instantly recognizable, even in this stark, nighttime setting. The clear 'DRIVE-THRU' messaging in both Japanese and English effectively communicates a key service. The dark background makes the illuminated sign pop, giving it a strong visual impact that would work well across various ad placements (digital billboards, social media, print). McDonald's frequently uses its iconic signage in advertising to reinforce brand presence and highlight convenience, making this a very plausible and effective real ad.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/mcdonalds/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the McDonald's logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/mcdonalds/step3.jpg", + "current_score": 0.8383, + "new_score": 0.8042, + "delta": -0.0341, + "target_salience_before": 0.8893, + "target_salience_after": 0.7045, + "judge": 0.9, + "judge_reason": "This ad creative is very high quality and fits the McDonald's brand perfectly. The image is clean, well-lit, and immediately recognizable as McDonald's due to the iconic Golden Arches and brand colors (red and yellow). The message 'OPEN LATE' is clear, concise, and directly relevant to a common customer need, especially for late-night cravings. The inclusion of '\u30c9\u30e9\u30a4\u30d6\u30b9\u30eb\u30fc' (Drive-thru) further emphasizes convenience, a key aspect of McDonald's service. This creative effectively communicates a valuable service offering using strong brand elements and would absolutely run as a real ad, particularly in markets like Japan where this sign style is common.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/mcdonalds/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/mcdonalds/thumb.jpg b/frontend/public/replay/mcdonalds/thumb.jpg new file mode 100644 index 0000000..dc110da Binary files /dev/null and b/frontend/public/replay/mcdonalds/thumb.jpg differ diff --git a/frontend/public/replay/nike/heat.png b/frontend/public/replay/nike/heat.png new file mode 100644 index 0000000..d0bbc0c Binary files /dev/null and b/frontend/public/replay/nike/heat.png differ diff --git a/frontend/public/replay/nike/image.jpg b/frontend/public/replay/nike/image.jpg new file mode 100644 index 0000000..7b70b22 Binary files /dev/null and b/frontend/public/replay/nike/image.jpg differ diff --git a/frontend/public/replay/nike/predict.json b/frontend/public/replay/nike/predict.json new file mode 100644 index 0000000..3e3ce1a --- /dev/null +++ b/frontend/public/replay/nike/predict.json @@ -0,0 +1,61 @@ +{ + "width": 1600, + "height": 2400, + "attention_score": 0.5922, + "heatmap_png": "replay/nike/heat.png", + "target_box": [ + 0.3, + 0.18, + 0.45, + 0.3 + ], + "scanpath": [ + { + "x": 0.575, + "y": 0.871, + "order": 1 + }, + { + "x": 0.452, + "y": 0.285, + "order": 2 + }, + { + "x": 0.053, + "y": 0.917, + "order": 3 + }, + { + "x": 0.849, + "y": 0.999, + "order": 4 + }, + { + "x": 0.44, + "y": 0.999, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.4748, + 0.7711, + 0.2, + 0.2 + ], + "share": 0.36, + "desc": "Subway sign" + }, + { + "region": [ + 0.0, + 0.817, + 0.2, + 0.2 + ], + "share": 0.074, + "desc": "No Turns sign" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/nike/step0-heat.png b/frontend/public/replay/nike/step0-heat.png new file mode 100644 index 0000000..2ed2250 Binary files /dev/null and b/frontend/public/replay/nike/step0-heat.png differ diff --git a/frontend/public/replay/nike/step0.jpg b/frontend/public/replay/nike/step0.jpg new file mode 100644 index 0000000..fd5835a Binary files /dev/null and b/frontend/public/replay/nike/step0.jpg differ diff --git a/frontend/public/replay/nike/step1-heat.png b/frontend/public/replay/nike/step1-heat.png new file mode 100644 index 0000000..ae6bf09 Binary files /dev/null and b/frontend/public/replay/nike/step1-heat.png differ diff --git a/frontend/public/replay/nike/step1.jpg b/frontend/public/replay/nike/step1.jpg new file mode 100644 index 0000000..37a80a6 Binary files /dev/null and b/frontend/public/replay/nike/step1.jpg differ diff --git a/frontend/public/replay/nike/step2-heat.png b/frontend/public/replay/nike/step2-heat.png new file mode 100644 index 0000000..e503b1b Binary files /dev/null and b/frontend/public/replay/nike/step2-heat.png differ diff --git a/frontend/public/replay/nike/step2.jpg b/frontend/public/replay/nike/step2.jpg new file mode 100644 index 0000000..23601b7 Binary files /dev/null and b/frontend/public/replay/nike/step2.jpg differ diff --git a/frontend/public/replay/nike/step3-heat.png b/frontend/public/replay/nike/step3-heat.png new file mode 100644 index 0000000..b430160 Binary files /dev/null and b/frontend/public/replay/nike/step3-heat.png differ diff --git a/frontend/public/replay/nike/step3.jpg b/frontend/public/replay/nike/step3.jpg new file mode 100644 index 0000000..ea1cb59 Binary files /dev/null and b/frontend/public/replay/nike/step3.jpg differ diff --git a/frontend/public/replay/nike/steps.json b/frontend/public/replay/nike/steps.json new file mode 100644 index 0000000..90c8672 --- /dev/null +++ b/frontend/public/replay/nike/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Nike logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Nike logo and product", + "variant_png": "replay/nike/step0.jpg", + "current_score": 0.5922, + "new_score": 0.446, + "delta": -0.1462, + "target_salience_before": 0.196, + "target_salience_after": 0.1086, + "judge": 1.0, + "judge_reason": "This Nike ad creative is exceptionally high quality and a perfect brand fit. It features a dynamic action shot of a recognizable athlete (Odell Beckham Jr.) that visually conveys the 'DEFY GRAVITY' message. The use of black and white photography with a single, strategic color pop (the orange cleat) is a classic and effective advertising technique often employed by Nike to highlight product and create visual interest. The aspirational headline 'DEFY GRAVITY' combined with Nike's iconic 'Just do it.' slogan strongly reinforces the brand's core values of performance, aspiration, and pushing human limits. This creative is impactful, visually compelling, and perfectly aligned with Nike's established brand identity, making it highly likely to run as a real ad.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/nike/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Nike logo and product as a strong, high-contrast focal point", + "variant_png": "replay/nike/step1.jpg", + "current_score": 0.5922, + "new_score": 0.4746, + "delta": -0.1176, + "target_salience_before": 0.196, + "target_salience_after": 0.1219, + "judge": 1.0, + "judge_reason": "This Nike ad creative is exceptionally high quality and a perfect fit for the brand. It features a prominent Nike-sponsored athlete (Odell Beckham Jr.), utilizes Nike's iconic 'Just Do It.' tagline along with the aspirational 'Unleash Your Greatness' slogan, and presents a powerful, dynamic image in a classic black and white style frequently employed by Nike for impactful campaigns. The clear call to action 'SHOP NOW' makes it suitable for a real-world advertisement, especially on a prominent digital billboard like the one depicted. This creative strongly aligns with Nike's brand identity of athletic excellence, motivation, and empowerment.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/nike/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Nike logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/nike/step2.jpg", + "current_score": 0.5922, + "new_score": 0.5364, + "delta": -0.0558, + "target_salience_before": 0.196, + "target_salience_after": 0.1561, + "judge": 0.95, + "judge_reason": "This Nike ad creative is exceptionally high quality and a perfect fit for the brand. It leverages Nike's iconic 'Just do it.' slogan prominently. The use of a recognizable athlete (Odell Beckham Jr. in a dynamic action shot) is characteristic of Nike's advertising strategy. The black and white aesthetic with a grainy texture creates a classic, powerful, and gritty feel that aligns perfectly with Nike's brand identity of dedication, perseverance, and athletic excellence. The secondary slogan, 'Don't stop 'til you get enough,' further reinforces this message. The repetition of 'Just do it.' (main and smaller at the bottom with a subtle swoosh) ensures strong brand recall. This ad would absolutely run as a real Nike ad, as it encapsulates all the hallmarks of their successful campaigns.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/nike/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Nike logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/nike/step3.jpg", + "current_score": 0.5922, + "new_score": 0.5959, + "delta": 0.0037, + "target_salience_before": 0.196, + "target_salience_after": 0.199, + "judge": 1.0, + "judge_reason": "This Nike ad creative is of extremely high quality and an impeccable brand fit. It features Odell Beckham Jr., a high-profile Nike athlete known for his spectacular plays, captured in a dynamic, aspirational pose. The black and white aesthetic with the prominently highlighted white Nike cleats creates a strong visual impact, drawing attention to the product while maintaining an iconic feel. The message, 'Don't stop 'til you get enough,' perfectly encapsulates Nike's motivational, relentless pursuit of greatness ethos, which is further cemented by their iconic 'Just do it.' slogan. This ad perfectly aligns with Nike's brand identity of inspiring athletes to push their limits and achieve excellence. It absolutely would run as a real Nike ad, likely as part of a major campaign during OBJ's prime.", + "vetoed": false, + "guard": "accept", + "guard_reasons": [ + "perceptible, localized/justified, and target salience improved" + ], + "improved": true, + "n_directives": 8, + "variant_heatmap": "replay/nike/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/nike/thumb.jpg b/frontend/public/replay/nike/thumb.jpg new file mode 100644 index 0000000..7aedce0 Binary files /dev/null and b/frontend/public/replay/nike/thumb.jpg differ diff --git a/frontend/public/replay/pepsi/heat.png b/frontend/public/replay/pepsi/heat.png new file mode 100644 index 0000000..02be056 Binary files /dev/null and b/frontend/public/replay/pepsi/heat.png differ diff --git a/frontend/public/replay/pepsi/image.jpg b/frontend/public/replay/pepsi/image.jpg new file mode 100644 index 0000000..1847ac4 Binary files /dev/null and b/frontend/public/replay/pepsi/image.jpg differ diff --git a/frontend/public/replay/pepsi/predict.json b/frontend/public/replay/pepsi/predict.json new file mode 100644 index 0000000..94e844f --- /dev/null +++ b/frontend/public/replay/pepsi/predict.json @@ -0,0 +1,40 @@ +{ + "width": 1600, + "height": 2401, + "attention_score": 0.8554, + "heatmap_png": "replay/pepsi/heat.png", + "target_box": [ + 0.33, + 0.3, + 0.34, + 0.45 + ], + "scanpath": [ + { + "x": 0.496, + "y": 0.346, + "order": 1 + }, + { + "x": 0.512, + "y": 0.608, + "order": 2 + }, + { + "x": 0.999, + "y": 0.061, + "order": 3 + }, + { + "x": 0.999, + "y": 0.776, + "order": 4 + }, + { + "x": 0.999, + "y": 0.553, + "order": 5 + } + ], + "distractors": [] +} \ No newline at end of file diff --git a/frontend/public/replay/pepsi/step0-heat.png b/frontend/public/replay/pepsi/step0-heat.png new file mode 100644 index 0000000..451afd0 Binary files /dev/null and b/frontend/public/replay/pepsi/step0-heat.png differ diff --git a/frontend/public/replay/pepsi/step0.jpg b/frontend/public/replay/pepsi/step0.jpg new file mode 100644 index 0000000..92e41c8 Binary files /dev/null and b/frontend/public/replay/pepsi/step0.jpg differ diff --git a/frontend/public/replay/pepsi/step1-heat.png b/frontend/public/replay/pepsi/step1-heat.png new file mode 100644 index 0000000..a96f564 Binary files /dev/null and b/frontend/public/replay/pepsi/step1-heat.png differ diff --git a/frontend/public/replay/pepsi/step1.jpg b/frontend/public/replay/pepsi/step1.jpg new file mode 100644 index 0000000..e8a0f66 Binary files /dev/null and b/frontend/public/replay/pepsi/step1.jpg differ diff --git a/frontend/public/replay/pepsi/step2-heat.png b/frontend/public/replay/pepsi/step2-heat.png new file mode 100644 index 0000000..fcaa1d9 Binary files /dev/null and b/frontend/public/replay/pepsi/step2-heat.png differ diff --git a/frontend/public/replay/pepsi/step2.jpg b/frontend/public/replay/pepsi/step2.jpg new file mode 100644 index 0000000..58c1319 Binary files /dev/null and b/frontend/public/replay/pepsi/step2.jpg differ diff --git a/frontend/public/replay/pepsi/step3-heat.png b/frontend/public/replay/pepsi/step3-heat.png new file mode 100644 index 0000000..7697351 Binary files /dev/null and b/frontend/public/replay/pepsi/step3-heat.png differ diff --git a/frontend/public/replay/pepsi/step3.jpg b/frontend/public/replay/pepsi/step3.jpg new file mode 100644 index 0000000..c059081 Binary files /dev/null and b/frontend/public/replay/pepsi/step3.jpg differ diff --git a/frontend/public/replay/pepsi/steps.json b/frontend/public/replay/pepsi/steps.json new file mode 100644 index 0000000..18122f3 --- /dev/null +++ b/frontend/public/replay/pepsi/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Pepsi logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Pepsi logo and product", + "variant_png": "replay/pepsi/step0.jpg", + "current_score": 0.8554, + "new_score": 0.5795, + "delta": -0.2759, + "target_salience_before": 0.9018, + "target_salience_after": 0.2102, + "judge": 0.4, + "judge_reason": "The ad creative is very basic and generic. While it uses Pepsi's brand colors and features the product, the photography of the can is flat, lacking the 'cold' or 'refreshing' visual cues (like condensation or vibrant lighting) typically used in beverage advertising to create desire. The typography is simple and functional but not distinctive, and the overall composition lacks creativity or a unique selling proposition beyond a very generic 'refresh your day.' It feels more like an internal draft or a low-budget social media filler than a polished, professionally produced ad from a global brand like Pepsi. It would likely be rejected or require significant improvements in photography and creative direction to run as a real ad.", + "vetoed": true, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/pepsi/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Pepsi logo and product as a strong, high-contrast focal point", + "variant_png": "replay/pepsi/step1.jpg", + "current_score": 0.8554, + "new_score": 0.5471, + "delta": -0.3083, + "target_salience_before": 0.9018, + "target_salience_after": 0.1842, + "judge": 0.5, + "judge_reason": "This creative has good brand-fit due to its iconic Pepsi blue background, prominent display of the product, and use of plausible cola slogans like 'REFRESH YOUR WORLD' and 'TASTE THE BREAK.' However, the overall quality falls short of what a major global brand like Pepsi would typically produce. The photography is basic, lacking the dynamic lighting, crispness, and visual appeal usually seen in professional ad campaigns (e.g., no condensation, somewhat flat lighting). The composition is extremely simple, almost to the point of being bland, and the use of two distinct taglines at the top and bottom can feel disjointed rather than cohesive. While it effectively communicates the brand and core message, its execution quality suggests it's more of a concept or mock-up rather than a finished ad that would run as-is in a real campaign for Pepsi.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/pepsi/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Pepsi logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/pepsi/step2.jpg", + "current_score": 0.8554, + "new_score": 0.7039, + "delta": -0.1515, + "target_salience_before": 0.9018, + "target_salience_after": 0.3625, + "judge": 0.65, + "judge_reason": "The ad is clear, on-brand with the prominent Pepsi can and the signature blue color palette. The slogan 'TASTE THE REFRESHMENT' is direct and relevant to a beverage product. It's a clean, minimalist design that effectively communicates the product and a core benefit. However, the overall visual quality is somewhat flat; it lacks the dynamic lighting, condensation, or other visual cues often used in beverage advertising to truly evoke the feeling of 'refreshment' and make the product more enticing. It feels functional but lacks creative sparkle or high production value typically seen in leading Pepsi campaigns. It could definitely run as a real ad, especially for digital banners, social media posts, or tactical print, but it's not a particularly strong or memorable piece of advertising that would anchor a major campaign.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/pepsi/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Pepsi logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/pepsi/step3.jpg", + "current_score": 0.8554, + "new_score": 0.6764, + "delta": -0.179, + "target_salience_before": 0.9018, + "target_salience_after": 0.3188, + "judge": 0.8, + "judge_reason": "This Pepsi ad creative is simple, clean, and effective. The product is prominently featured against a vibrant blue background that perfectly aligns with Pepsi's brand colors. The photography of the can is good, and the text 'REFRESH YOUR WORLD' is legible and conveys a core brand benefit. It's a very direct and functional ad that fits the brand well in terms of color, product, and message. It would absolutely run as a real ad, especially in digital formats (social media, banner ads) where quick recognition and clear messaging are key. However, it scores slightly lower than a perfect 1.0 because it's quite basic and lacks the high-end creative flair, dynamic elements (like condensation, ice, or lifestyle context), or unique visual storytelling often seen in major, aspirational campaigns from a brand like Pepsi. It's a solid, safe, and brand-appropriate ad, but not groundbreaking.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 6, + "variant_heatmap": "replay/pepsi/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/pepsi/thumb.jpg b/frontend/public/replay/pepsi/thumb.jpg new file mode 100644 index 0000000..eb49b61 Binary files /dev/null and b/frontend/public/replay/pepsi/thumb.jpg differ diff --git a/frontend/public/replay/red-bull/heat.png b/frontend/public/replay/red-bull/heat.png new file mode 100644 index 0000000..97734de Binary files /dev/null and b/frontend/public/replay/red-bull/heat.png differ diff --git a/frontend/public/replay/red-bull/image.jpg b/frontend/public/replay/red-bull/image.jpg new file mode 100644 index 0000000..cf5597d Binary files /dev/null and b/frontend/public/replay/red-bull/image.jpg differ diff --git a/frontend/public/replay/red-bull/predict.json b/frontend/public/replay/red-bull/predict.json new file mode 100644 index 0000000..7405be3 --- /dev/null +++ b/frontend/public/replay/red-bull/predict.json @@ -0,0 +1,61 @@ +{ + "width": 1600, + "height": 2400, + "attention_score": 0.79, + "heatmap_png": "replay/red-bull/heat.png", + "target_box": [ + 0.34, + 0.28, + 0.26, + 0.5 + ], + "scanpath": [ + { + "x": 0.516, + "y": 0.521, + "order": 1 + }, + { + "x": 0.538, + "y": 0.357, + "order": 2 + }, + { + "x": 0.529, + "y": 0.927, + "order": 3 + }, + { + "x": 0.182, + "y": 0.408, + "order": 4 + }, + { + "x": 0.214, + "y": 0.712, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.4293, + 0.8268, + 0.2, + 0.2 + ], + "share": 0.094, + "desc": "White phone back" + }, + { + "region": [ + 0.1082, + 0.6158, + 0.2, + 0.2 + ], + "share": 0.055, + "desc": "Smartphone screen" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/red-bull/step0-heat.png b/frontend/public/replay/red-bull/step0-heat.png new file mode 100644 index 0000000..845a093 Binary files /dev/null and b/frontend/public/replay/red-bull/step0-heat.png differ diff --git a/frontend/public/replay/red-bull/step0.jpg b/frontend/public/replay/red-bull/step0.jpg new file mode 100644 index 0000000..5de9fd5 Binary files /dev/null and b/frontend/public/replay/red-bull/step0.jpg differ diff --git a/frontend/public/replay/red-bull/step1-heat.png b/frontend/public/replay/red-bull/step1-heat.png new file mode 100644 index 0000000..d3eecf7 Binary files /dev/null and b/frontend/public/replay/red-bull/step1-heat.png differ diff --git a/frontend/public/replay/red-bull/step1.jpg b/frontend/public/replay/red-bull/step1.jpg new file mode 100644 index 0000000..117a80c Binary files /dev/null and b/frontend/public/replay/red-bull/step1.jpg differ diff --git a/frontend/public/replay/red-bull/step2-heat.png b/frontend/public/replay/red-bull/step2-heat.png new file mode 100644 index 0000000..bdb9a5a Binary files /dev/null and b/frontend/public/replay/red-bull/step2-heat.png differ diff --git a/frontend/public/replay/red-bull/step2.jpg b/frontend/public/replay/red-bull/step2.jpg new file mode 100644 index 0000000..a4b0681 Binary files /dev/null and b/frontend/public/replay/red-bull/step2.jpg differ diff --git a/frontend/public/replay/red-bull/step3-heat.png b/frontend/public/replay/red-bull/step3-heat.png new file mode 100644 index 0000000..d263574 Binary files /dev/null and b/frontend/public/replay/red-bull/step3-heat.png differ diff --git a/frontend/public/replay/red-bull/step3.jpg b/frontend/public/replay/red-bull/step3.jpg new file mode 100644 index 0000000..04c877f Binary files /dev/null and b/frontend/public/replay/red-bull/step3.jpg differ diff --git a/frontend/public/replay/red-bull/steps.json b/frontend/public/replay/red-bull/steps.json new file mode 100644 index 0000000..cdc8fdb --- /dev/null +++ b/frontend/public/replay/red-bull/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Red Bull logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Red Bull logo and product", + "variant_png": "replay/red-bull/step0.jpg", + "current_score": 0.79, + "new_score": 0.6797, + "delta": -0.1103, + "target_salience_before": 0.4909, + "target_salience_after": 0.2769, + "judge": 0.9, + "judge_reason": "This Red Bull ad creative is of high quality and excellent brand-fit. The image clearly showcases the product in a relatable, everyday setting (a desk with a computer), suggesting a context of work or study where a boost might be needed. The headline 'FUEL YOUR DRIVE' directly aligns with Red Bull's core promise of energy and motivation. The call to action 'GRAB YOUR WINGS' is a perfect, direct reference to Red Bull's iconic slogan, strongly reinforcing brand identity and recall. The typography is clean, legible, and well-placed. The overall composition is simple, effective, and professional. This ad would very likely run as a real ad due to its strong brand messaging, clear product focus, and targeting of a common consumption occasion for Red Bull.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/red-bull/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Red Bull logo and product as a strong, high-contrast focal point", + "variant_png": "replay/red-bull/step1.jpg", + "current_score": 0.79, + "new_score": 0.591, + "delta": -0.199, + "target_salience_before": 0.4909, + "target_salience_after": 0.1885, + "judge": 0.85, + "judge_reason": "This Red Bull ad creative demonstrates good quality and strong brand-fit. The image clearly features a Red Bull can in a relatable setting (a desk with tech gadgets), appealing to a demographic of professionals, students, or creatives who might need an energy boost. The slogan 'UNLEASH YOUR DAY' aligns well with Red Bull's core message of energy, performance, and overcoming limits, resonating with their 'Gives You Wiiiings' ethos in a practical, everyday context. The 'BUY NOW' CTA is clear and functional for a digital ad. The overall composition is clean and focused. While the visual aesthetic is slightly more subdued than Red Bull's typical high-octane imagery, it effectively targets a specific use-case and audience, making it plausible for a real ad campaign, especially for digital channels or an 'everyday energy' focus.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/red-bull/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Red Bull logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/red-bull/step2.jpg", + "current_score": 0.79, + "new_score": 0.7721, + "delta": -0.0179, + "target_salience_before": 0.4909, + "target_salience_after": 0.442, + "judge": 0.9, + "judge_reason": "This Red Bull ad creative is excellent in both quality and brand-fit. The image itself is high-quality, with good lighting, sharp focus on the product, and a clean, appealing composition. The context of a desk workspace (with a computer, drawing tablet, phone, and keyboard) is highly relatable to a significant portion of Red Bull's target audience, particularly students, professionals, and creatives who need an energy boost for focus and productivity. The iconic tagline 'GIVES YOU WINGS.' is perfectly placed, reinforcing the brand's core message directly and effectively. This ad perfectly embodies a common use-case for Red Bull in everyday life, making it authentic and impactful. It would absolutely run as a real ad across various digital and print platforms.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/red-bull/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Red Bull logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/red-bull/step3.jpg", + "current_score": 0.79, + "new_score": 0.7172, + "delta": -0.0728, + "target_salience_before": 0.4909, + "target_salience_after": 0.3309, + "judge": 0.85, + "judge_reason": "This creative has excellent brand-fit. It prominently features the Red Bull can and the iconic 'GIVES YOU WINGS' slogan, which immediately communicates the brand. The setting (a desk with a computer) is highly relevant, depicting a common scenario where Red Bull is consumed for energy or focus (e.g., studying, working, gaming). The image quality is good, with natural lighting and a clean aesthetic. While perhaps not as high-budget or action-packed as some Red Bull campaigns, this type of relatable, 'everyday life' integration is common for brands, especially in digital and social media advertising. It absolutely could run as a real ad.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 8, + "variant_heatmap": "replay/red-bull/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/red-bull/thumb.jpg b/frontend/public/replay/red-bull/thumb.jpg new file mode 100644 index 0000000..5a06556 Binary files /dev/null and b/frontend/public/replay/red-bull/thumb.jpg differ diff --git a/frontend/public/replay/spotify/heat.png b/frontend/public/replay/spotify/heat.png new file mode 100644 index 0000000..08c60de Binary files /dev/null and b/frontend/public/replay/spotify/heat.png differ diff --git a/frontend/public/replay/spotify/image.jpg b/frontend/public/replay/spotify/image.jpg new file mode 100644 index 0000000..dd9480a Binary files /dev/null and b/frontend/public/replay/spotify/image.jpg differ diff --git a/frontend/public/replay/spotify/predict.json b/frontend/public/replay/spotify/predict.json new file mode 100644 index 0000000..0f12397 --- /dev/null +++ b/frontend/public/replay/spotify/predict.json @@ -0,0 +1,51 @@ +{ + "width": 1600, + "height": 2400, + "attention_score": 0.7596, + "heatmap_png": "replay/spotify/heat.png", + "target_box": [ + 0.32, + 0.28, + 0.4, + 0.5 + ], + "scanpath": [ + { + "x": 0.378, + "y": 0.52, + "order": 1 + }, + { + "x": 0.208, + "y": 0.911, + "order": 2 + }, + { + "x": 0.217, + "y": 0.041, + "order": 3 + }, + { + "x": 0.235, + "y": 0.729, + "order": 4 + }, + { + "x": 0.767, + "y": 0.812, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.1082, + 0.8111, + 0.2, + 0.2 + ], + "share": 0.115, + "desc": "Human hand" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/spotify/step0-heat.png b/frontend/public/replay/spotify/step0-heat.png new file mode 100644 index 0000000..5954042 Binary files /dev/null and b/frontend/public/replay/spotify/step0-heat.png differ diff --git a/frontend/public/replay/spotify/step0.jpg b/frontend/public/replay/spotify/step0.jpg new file mode 100644 index 0000000..c773b19 Binary files /dev/null and b/frontend/public/replay/spotify/step0.jpg differ diff --git a/frontend/public/replay/spotify/step1-heat.png b/frontend/public/replay/spotify/step1-heat.png new file mode 100644 index 0000000..4108f56 Binary files /dev/null and b/frontend/public/replay/spotify/step1-heat.png differ diff --git a/frontend/public/replay/spotify/step1.jpg b/frontend/public/replay/spotify/step1.jpg new file mode 100644 index 0000000..fbcef50 Binary files /dev/null and b/frontend/public/replay/spotify/step1.jpg differ diff --git a/frontend/public/replay/spotify/step2-heat.png b/frontend/public/replay/spotify/step2-heat.png new file mode 100644 index 0000000..753f7f8 Binary files /dev/null and b/frontend/public/replay/spotify/step2-heat.png differ diff --git a/frontend/public/replay/spotify/step2.jpg b/frontend/public/replay/spotify/step2.jpg new file mode 100644 index 0000000..0d16928 Binary files /dev/null and b/frontend/public/replay/spotify/step2.jpg differ diff --git a/frontend/public/replay/spotify/step3-heat.png b/frontend/public/replay/spotify/step3-heat.png new file mode 100644 index 0000000..4ff259c Binary files /dev/null and b/frontend/public/replay/spotify/step3-heat.png differ diff --git a/frontend/public/replay/spotify/step3.jpg b/frontend/public/replay/spotify/step3.jpg new file mode 100644 index 0000000..2ebfbf2 Binary files /dev/null and b/frontend/public/replay/spotify/step3.jpg differ diff --git a/frontend/public/replay/spotify/steps.json b/frontend/public/replay/spotify/steps.json new file mode 100644 index 0000000..e9aedf8 --- /dev/null +++ b/frontend/public/replay/spotify/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the Spotify logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the Spotify logo and product", + "variant_png": "replay/spotify/step0.jpg", + "current_score": 0.7596, + "new_score": 0.4674, + "delta": -0.2922, + "target_salience_before": 0.6324, + "target_salience_after": 0.1756, + "judge": 0.9, + "judge_reason": "This Spotify ad creative is of high quality and excellent brand-fit. The image is clean, well-composed, and features the product (Spotify app on a phone) prominently. The text 'MUSIC FOR EVERY MOMENT' and 'LISTEN FREE ON SPOTIFY' are clear, legible, and perfectly align with Spotify's core messaging and value proposition. The use of the official Spotify logo and wordmark ensures instant brand recognition. This ad effectively communicates key benefits (music for all occasions, free access) in a visually appealing and brand-consistent manner. It looks like a real ad Spotify would run.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/spotify/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the Spotify logo and product as a strong, high-contrast focal point", + "variant_png": "replay/spotify/step1.jpg", + "current_score": 0.7596, + "new_score": 0.7798, + "delta": 0.0202, + "target_salience_before": 0.6324, + "target_salience_after": 0.7088, + "judge": 0.9, + "judge_reason": "This Spotify ad creative demonstrates high quality and strong brand-fit, making it very likely to run as a real ad. The image is clean, well-lit, and professionally composed, focusing clearly on the smartphone with the Spotify app displayed. The use of the prominent Spotify logo, a relevant tagline ('STREAM YOUR WORLD'), and a clear call to action ('DOWNLOAD NOW') aligns perfectly with typical app marketing strategies. The casual, everyday setting (person holding a phone, blurred outdoor background) resonates with how people naturally interact with streaming services, emphasizing convenience and personal entertainment. The aesthetic is modern and fits Spotify's established brand image. The only minor critique is the visible smudges on the phone screen in some crops, which is a small detail but could be polished for absolute perfection.", + "vetoed": false, + "guard": "accept", + "guard_reasons": [ + "perceptible, localized/justified, and target salience improved" + ], + "improved": true, + "n_directives": 7, + "variant_heatmap": "replay/spotify/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the Spotify logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/spotify/step2.jpg", + "current_score": 0.7798, + "new_score": 0.7747, + "delta": -0.0051, + "target_salience_before": 0.7088, + "target_salience_after": 0.6884, + "judge": 0.9, + "judge_reason": "This Spotify ad creative is of high quality and excellent brand-fit. The image is clear, well-composed, and focuses directly on the product \u2013 the Spotify app on a smartphone. The iconic Spotify logo is prominently displayed, instantly recognizable. The tagline 'STREAM YOUR WORLD' effectively communicates Spotify's value proposition of extensive content and personalization. The clear call to action 'DOWNLOAD NOW' is direct and actionable. The overall aesthetic is clean, modern, and perfectly aligns with Spotify's brand identity. This creative would absolutely run as a real ad, as it is effective, on-brand, and communicates its message clearly.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/spotify/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the Spotify logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/spotify/step3.jpg", + "current_score": 0.7798, + "new_score": 0.7054, + "delta": -0.0744, + "target_salience_before": 0.7088, + "target_salience_after": 0.4793, + "judge": 0.9, + "judge_reason": "This creative is high quality and an excellent brand fit for Spotify. The first-person perspective, looking down at a phone with the Spotify interface, creates a relatable and authentic feel, aligning with Spotify's casual and accessible brand image. The prominent display of the Spotify logo and the 'SPOTIFY PREMIUM' call to action are clear and well-branded. The text 'STREAM YOUR WORLD' and 'DOWNLOAD NOW' clearly communicate value and provide a direct call to action. The overall aesthetic is clean, modern, and perfectly suited for a mobile-first advertising environment. This creative would absolutely run as a real ad, likely across social media platforms or in app stores, effectively targeting potential users or those considering Premium.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/spotify/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/spotify/thumb.jpg b/frontend/public/replay/spotify/thumb.jpg new file mode 100644 index 0000000..bedc1be Binary files /dev/null and b/frontend/public/replay/spotify/thumb.jpg differ diff --git a/frontend/public/replay/the-ordinary/heat.png b/frontend/public/replay/the-ordinary/heat.png new file mode 100644 index 0000000..94cf340 Binary files /dev/null and b/frontend/public/replay/the-ordinary/heat.png differ diff --git a/frontend/public/replay/the-ordinary/image.jpg b/frontend/public/replay/the-ordinary/image.jpg new file mode 100644 index 0000000..e046ab4 Binary files /dev/null and b/frontend/public/replay/the-ordinary/image.jpg differ diff --git a/frontend/public/replay/the-ordinary/predict.json b/frontend/public/replay/the-ordinary/predict.json new file mode 100644 index 0000000..7cfcb19 --- /dev/null +++ b/frontend/public/replay/the-ordinary/predict.json @@ -0,0 +1,51 @@ +{ + "width": 1200, + "height": 1800, + "attention_score": 0.7595, + "heatmap_png": "replay/the-ordinary/heat.png", + "target_box": [ + 0.29, + 0.44, + 0.3, + 0.26 + ], + "scanpath": [ + { + "x": 0.548, + "y": 0.391, + "order": 1 + }, + { + "x": 0.317, + "y": 0.479, + "order": 2 + }, + { + "x": 0.532, + "y": 0.595, + "order": 3 + }, + { + "x": 0.635, + "y": 0.999, + "order": 4 + }, + { + "x": 0.34, + "y": 0.998, + "order": 5 + } + ], + "distractors": [ + { + "region": [ + 0.4484, + 0.2906, + 0.2, + 0.2 + ], + "share": 0.537, + "desc": "Smiling woman's face" + } + ] +} \ No newline at end of file diff --git a/frontend/public/replay/the-ordinary/step0-heat.png b/frontend/public/replay/the-ordinary/step0-heat.png new file mode 100644 index 0000000..3623c27 Binary files /dev/null and b/frontend/public/replay/the-ordinary/step0-heat.png differ diff --git a/frontend/public/replay/the-ordinary/step0.jpg b/frontend/public/replay/the-ordinary/step0.jpg new file mode 100644 index 0000000..29f72f6 Binary files /dev/null and b/frontend/public/replay/the-ordinary/step0.jpg differ diff --git a/frontend/public/replay/the-ordinary/step1-heat.png b/frontend/public/replay/the-ordinary/step1-heat.png new file mode 100644 index 0000000..98d6825 Binary files /dev/null and b/frontend/public/replay/the-ordinary/step1-heat.png differ diff --git a/frontend/public/replay/the-ordinary/step1.jpg b/frontend/public/replay/the-ordinary/step1.jpg new file mode 100644 index 0000000..616499a Binary files /dev/null and b/frontend/public/replay/the-ordinary/step1.jpg differ diff --git a/frontend/public/replay/the-ordinary/step2-heat.png b/frontend/public/replay/the-ordinary/step2-heat.png new file mode 100644 index 0000000..9793edd Binary files /dev/null and b/frontend/public/replay/the-ordinary/step2-heat.png differ diff --git a/frontend/public/replay/the-ordinary/step2.jpg b/frontend/public/replay/the-ordinary/step2.jpg new file mode 100644 index 0000000..4dd9cc8 Binary files /dev/null and b/frontend/public/replay/the-ordinary/step2.jpg differ diff --git a/frontend/public/replay/the-ordinary/step3-heat.png b/frontend/public/replay/the-ordinary/step3-heat.png new file mode 100644 index 0000000..ac37d6e Binary files /dev/null and b/frontend/public/replay/the-ordinary/step3-heat.png differ diff --git a/frontend/public/replay/the-ordinary/step3.jpg b/frontend/public/replay/the-ordinary/step3.jpg new file mode 100644 index 0000000..80153c7 Binary files /dev/null and b/frontend/public/replay/the-ordinary/step3.jpg differ diff --git a/frontend/public/replay/the-ordinary/steps.json b/frontend/public/replay/the-ordinary/steps.json new file mode 100644 index 0000000..1ab9fbe --- /dev/null +++ b/frontend/public/replay/the-ordinary/steps.json @@ -0,0 +1,82 @@ +[ + { + "step": 0, + "directive": "make SEVERAL coordinated changes at once to turn this into a polished campaign: remove the clutter and any objects, hands, props or stray text crowding or blocking the The Ordinary logo and product; reframe it head-on and enlarge it as the clear hero; clean and simplify the background; and add a bold, legible on-brand headline, call-to-action and wordmark on the The Ordinary logo and product", + "variant_png": "replay/the-ordinary/step0.jpg", + "current_score": 0.7595, + "new_score": 0.7166, + "delta": -0.0429, + "target_salience_before": 0.2465, + "target_salience_after": 0.1974, + "judge": 0.2, + "judge_reason": "This ad creative has some elements that align with The Ordinary's brand, such as the minimalist product display and the 'SIMPLIFY YOUR SKIN' message, which resonates with their straightforward approach. However, it fails significantly on two critical points for a 'real ad':\n\n1. **Placeholder Text on Labels**: The most glaring issue is the use of lorem ipsum-like text on the product labels. The Ordinary is renowned for its transparent and scientific labeling, clearly stating product names (e.g., 'Niacinamide 10% + Zinc 1%') and ingredients. Placeholder text immediately signals that this is not a genuine product advertisement.\n2. **Background Color**: While The Ordinary does use color in some campaigns, their primary aesthetic is often very clinical, utilizing white, grey, or black backgrounds. This particular shade of pink feels a bit off-brand for their typically gender-neutral and scientific image, leaning more towards a conventionally 'feminine' skincare brand.\n\nWhile the composition and idea are clean, the fundamental error of the placeholder text means this ad would absolutely not run as a real ad for The Ordinary, and therefore its quality as a production-ready creative is very low.", + "vetoed": true, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/the-ordinary/step0-heat.png" + }, + { + "step": 1, + "directive": "add a bold, legible, on-brand headline and call-to-action and strengthen the logo/wordmark right at the The Ordinary logo and product as a strong, high-contrast focal point", + "variant_png": "replay/the-ordinary/step1.jpg", + "current_score": 0.7595, + "new_score": 0.5067, + "delta": -0.2528, + "target_salience_before": 0.2465, + "target_salience_after": 0.0802, + "judge": 0.2, + "judge_reason": "The ad creative features good visual quality, a relatable model, and clearly displays The Ordinary's iconic products. The messaging around 'Science-Backed' and 'Discover Your Regimen' aligns well with the brand's identity. However, there is a critical and glaring typo: 'SKINKCARE' instead of 'SKINCARE' in the prominent headline. This significant error makes the ad unprofessional and fundamentally unacceptable for a brand that emphasizes scientific precision and attention to detail. This flaw alone would prevent it from running as a real ad, severely undermining its quality despite other strong elements.", + "vetoed": true, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/the-ordinary/step1-heat.png" + }, + { + "step": 2, + "directive": "clearly enlarge, brighten and sharpen the The Ordinary logo and product so it becomes the single biggest, boldest focal element while gently dimming and de-cluttering the surroundings \u2014 a polished, real ad", + "variant_png": "replay/the-ordinary/step2.jpg", + "current_score": 0.7595, + "new_score": 0.537, + "delta": -0.2225, + "target_salience_before": 0.2465, + "target_salience_after": 0.0906, + "judge": 0.9, + "judge_reason": "This ad creative demonstrates strong brand-fit for The Ordinary. The tagline 'SCIENCE. SIMPLIFIED. SKINCARE.' perfectly encapsulates the brand's core philosophy of accessible, ingredient-focused products. The amber dropper bottles are iconic and immediately recognizable as The Ordinary's packaging, even without a visible brand logo. The model appears natural and relatable, reinforcing the idea of real people using real products, which aligns with The Ordinary's unpretentious approach. The overall quality of the image is high, with good lighting, clear focus, and legible text. While The Ordinary often uses more minimalist, product-focused ads without models, this creative effectively blends a positive user experience with the brand's scientific messaging and product aesthetic. It would definitely run as a real ad, possibly targeting a slightly broader audience while staying true to its identity.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/the-ordinary/step2-heat.png" + }, + { + "step": 3, + "directive": "remove or clean away any objects, hands, props or background obstructions that crowd or block the The Ordinary logo and product so the product is fully visible, unobstructed, and the clear hero of the shot", + "variant_png": "replay/the-ordinary/step3.jpg", + "current_score": 0.7595, + "new_score": 0.7398, + "delta": -0.0197, + "target_salience_before": 0.2465, + "target_salience_after": 0.222, + "judge": 0.95, + "judge_reason": "This ad creative is excellent in terms of both quality and brand-fit. The minimalist design, clear typography, and focus on the product labels (which highlight the key ingredients) are perfectly aligned with The Ordinary's 'clinical authenticity' and ingredient-first approach. The use of a simple, soft pink background provides a clean, modern aesthetic that makes the amber bottles and white labels pop, without distracting from the products themselves. The 'THE ORDINARY.' branding is prominent at the top, and the 'SHOP NOW' call to action is clear and effective at the bottom. The slight angle of the bottles adds a touch of visual interest without cluttering the minimalist composition. This creative absolutely looks like it would run as a real ad for The Ordinary; it captures their essence perfectly and delivers a clear message.", + "vetoed": false, + "guard": "reject", + "guard_reasons": [ + "attention score did not improve" + ], + "improved": false, + "n_directives": 7, + "variant_heatmap": "replay/the-ordinary/step3-heat.png" + } +] \ No newline at end of file diff --git a/frontend/public/replay/the-ordinary/thumb.jpg b/frontend/public/replay/the-ordinary/thumb.jpg new file mode 100644 index 0000000..51af9ce Binary files /dev/null and b/frontend/public/replay/the-ordinary/thumb.jpg differ diff --git a/frontend/src/ActivityLog.tsx b/frontend/src/ActivityLog.tsx index 2a87388..2233303 100644 --- a/frontend/src/ActivityLog.tsx +++ b/frontend/src/ActivityLog.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import type { PredictResult, AgentsResult } from "./api"; +import { DEMO, fmtPts, type PredictResult, type AgentsResult } from "./api"; // Live activity feed. Reveals the REAL pipeline (pred + agents.iterations) step by // step on a timer, so the run reads as a live process instead of an instant jump. @@ -48,7 +48,7 @@ export default function ActivityLog({ busy, pred, agents }: Props) { return (+ Static demo: it replays runs recorded on the real backend (DeepGaze IIE on a GPU, Gemini agents). Nothing runs live. +
+ )} {!imgUrl ? ( <> @@ -234,17 +250,17 @@ export default function App() {* {active.brand}: {active.note}.
@@ -378,12 +401,12 @@ export default function App() { <> {stepCtl.lastImproved - ? `✓ Branch ${stepCtl.step} kept — attention now ${Math.round(stepCtl.lastScore * 100)}% (+${Math.round((stepCtl.bestScore - stepCtl.baseline) * 100)} pts total)` + ? `✓ Branch ${stepCtl.step} kept — attention now ${Math.round(stepCtl.lastScore * 100)}% (${fmtPts(stepCtl.bestScore - stepCtl.baseline)} pts total)` : `✕ Branch ${stepCtl.step} not adopted — ${Math.round(stepCtl.lastScore * 100)}%${stepCtl.lastReason ? `, ${stepCtl.lastReason}` : ""}`} {stepCtl.exhausted - ? all directions explored + ? {DEMO ? "end of the recorded run" : "all directions explored"} : }