diff --git a/docs/architecture/llama-cpp.md b/docs/architecture/llama-cpp.md index 299c8d4e..bd7c4be2 100644 --- a/docs/architecture/llama-cpp.md +++ b/docs/architecture/llama-cpp.md @@ -14,6 +14,11 @@ choosing between **Qwen3-VL-8B**, **MiniCPM-V-4.5**, and Future consumers (Home Assistant, agentic tooling) can hit the same endpoint via LiteLLM at the cluster gateway. +First benchmark run (2026-05-10): see +`infra/docs/benchmarks/2026-05-10-vision-llm.md`. Verdict: **qwen3vl-4b** +for the request path (3.55 s p50, 100% parse, decisive top-N +distribution). qwen3vl-8b for caption polish on top picks. + ## Why llama.cpp + llama-swap (not Ollama) Verified across 7+7 research/challenger subagents (2026-05-10): diff --git a/docs/benchmarks/2026-05-10-vision-llm.md b/docs/benchmarks/2026-05-10-vision-llm.md new file mode 100644 index 00000000..70dafedf --- /dev/null +++ b/docs/benchmarks/2026-05-10-vision-llm.md @@ -0,0 +1,253 @@ +# Vision-LLM benchmark β€” Malaga / Seville album + +**Run ID:** `2026-05-10-1424` Β· **Date:** 2026-05-10 Β· **Operator:** wizard + +100 photos randomly sampled (seed=42) from the Immich album `πŸ‡ͺπŸ‡Έ Malaga +Seville` (`46565b85-7580-4ac1-91a6-1ece2cf8634d`, 1556 image assets + +9 videos), scored by three local vision-LLMs served by `llama-swap` +on a single Tesla T4. Goal: pick a model to wire into +`instagram-poster`'s `/candidates` ranking path. + +## TL;DR + +**Recommendation: `qwen3vl-4b`.** + +- **Fastest** by a wide margin (3.55 s p50, 60% of qwen3vl-8b), + important once this is in the request path of `/candidates`. +- **100% structured-output success** β€” same as the other two; GBNF + grammar enforcement worked across the board. +- **Captions are competitive** with the 8B model in qualitative review + (tied or close on 8/10 sampled photos; 8B wins on Flair, 4B wins on + Latency). +- **Most decisive scorer** β€” 47/100 photos got IG-fit=9 vs 17 for + qwen3vl-8b and 9 for minicpm. We get more signal at the top end + for ranking. + +Use qwen3vl-8b for *manual* caption refinement (top-1 of the day) if +caption polish matters. Use minicpm-v-4-5 for nothing immediate β€” it's +the most conservative scorer and the slowest at high quantiles, with +no offsetting wins in this dataset. + +## Setup + +- Hardware: 1Γ— Tesla T4 (16 GiB VRAM), `nvidia.com/gpu` time-slicing + enabled (replicas=100), pod scheduled on `k8s-node1`. +- Server: `mostlygeek/llama-swap:cuda` (ships llama.cpp `b9085-046e28443`) + on `llama-swap.llama-cpp.svc.cluster.local:8080`. +- Models: GGUF Q4_K_M, mmproj F16 except qwen3vl-4b which used the + Q8_0 mmproj (alphabetically first matching the glob). +- Image prep: EXIF-transposed, long-edge resized to 1024 px, JPEG q=90, + base64-embedded as `image_url` data URLs. +- Generation: `temperature=0`, `top_k=1`, `enable_thinking=false`, + GBNF grammar pinning the JSON schema (6 fields, 1–10 ints, ≀8 tags). +- Run isolation: `immich-machine-learning` scaled to 0 for the + duration to avoid noisy GPU contention. *(Diagnostic note: the + scheduling failure that triggered this was actually node1 RAM β€” + not GPU β€” at 94% allocated. Time-slicing was already on. Bumping + node1 RAM is tracked as a follow-up.)* + +## Headline numbers + +| model | n | parse_ok | p50 latency | p95 latency | median IG-fit | median aesthetic | +|-------|---|----------|-------------|-------------|---------------|------------------| +| **qwen3vl-4b** | 100 | 100% | **3.55 s** | 4.06 s | 8.0 | 8.0 | +| minicpm-v-4-5 | 100 | 100% | 5.62 s | 6.00 s | 7.0 | 8.0 | +| qwen3vl-8b | 100 | 100% | 5.98 s | 6.64 s | 7.0 | 8.0 | + +Total wall time for the run: **33 m 32 s** (300 calls + 3 cold loads +of ~30 s each). + +## What each model is good at + +### qwen3vl-4b β€” fast and decisive +- p50 3.55 s β€” comfortable for adding to `/candidates` request path. +- IG-fit distribution skews right (47 nines), spreading 6 β†’ 9 fairly + evenly, which is what you want from a *ranker*. +- Captions are emoji-friendly, hashtag-friendly, sometimes + hallucinatory (e.g. labelled a Seville street as "Barcelona's + colourful streets" once). +- Failure mode to watch: occasional double-down on the same caption + template ("Lost in the tiles. 🌿" repeated across two unrelated + blue-dress photos). + +### minicpm-v-4-5 β€” conservative, terse +- Most conservative scorer: 65% of photos got IG-fit=7. Only 9 nines. + Less useful as a top-N ranker because the top is squashed. +- Fastest p95 of the three (6.0 s) but slower p50 than qwen3vl-4b. +- Captions are short and lower-case ("azulejo dreams.", + "sunshine & secrets") β€” distinct voice but less Instagram-native. + +### qwen3vl-8b β€” most polished captions +- Best subject identification (specifically named "Metropol Parasol" + and "Plaza de EspaΓ±a" by name where the others said "modern + architecture" / "plaza"). +- Captions read well: "Coffee & calm vibes β˜•οΈ", "where modern meets + historic under a brilliant sky". +- Slowest p50 (5.98 s) and tightest score distribution (median 7, + 17 nines) β€” middle of the pack as a ranker. + +## Top-10 agreement (Kendall-tau-style overlap) + +How many of each model's top-10 IG-fit picks appear in another +model's top-10: + +| pair | overlap | +|------|---------| +| qwen3vl-4b ↔ qwen3vl-8b | 5/10 | +| minicpm-v-4-5 ↔ qwen3vl-4b | 4/10 | +| minicpm-v-4-5 ↔ qwen3vl-8b | 4/10 | + +Read: there's moderate but not strong agreement. The models pick +roughly half the same "best" photos and half different ones. For +ranking, that's a healthy sign β€” they're not collapsing to a single +notion of "good", so combining their scores would add real signal. + +## Cost-equivalent context + +Approximate cost to score the same 100 photos via cloud APIs +(prompt β‰ˆ 1100 tokens incl. image, completion β‰ˆ 100 tokens): + +| backend | input | output | per-100 photos | +|---------|-------|--------|----------------| +| Local llama-swap on T4 | β€” | β€” | β‰ˆ $0.04 (electricity, ~70 W Γ— 7 min) | +| Anthropic Haiku 4.5 | $1.00/M | $5.00/M | β‰ˆ $0.15 | +| Anthropic Sonnet 4.6 | $3.00/M | $15.00/M | β‰ˆ $0.45 | +| Google Gemini 2.5 Flash | $0.30/M | $2.50/M | β‰ˆ $0.05 | + +Local is competitive with Gemini Flash on marginal cost. The case +for keeping it local is privacy (Immich originals never leave the +LAN), no rate-limits, and no per-call quota planning. The case +against is the GPU is finite β€” adding this to a request path means +sharing T4 time with frigate, ytdlp, and (when we restore it) +immich-ml. With time-slicing on, that's tractable but each tenant +gets fewer full-GPU kernels. + +## Sample captions (10 representative photos, all 3 models) + +`9f9c9faf-...` β€” man at ornate arch in Seville +- **minicpm-v-4-5** (7/8): sunshine & secrets +- **qwen3vl-4b** (9/8): Found the perfect spot to pause. 🌞 #travel #architecture +- **qwen3vl-8b** (9/8): Standing in Seville's magic, framed by history and color. + +`0d53158b-...` β€” Metropol Parasol +- **minicpm-v-4-5** (9/8): Seville's skyward statement. +- **qwen3vl-4b** (9/8): Seville's iconic modern structure against a vibrant blue sky. +- **qwen3vl-8b** (9/8): The Metropol Parasol in Seville, where modern meets historic under a brilliant sky. + +`23137c1c-...` β€” coffee shot +- **minicpm-v-4-5** (8/7): a morning pick-me-up and a smile. +- **qwen3vl-4b** (8/7): Coffee & chill. Perfectly imperfect moment. +- **qwen3vl-8b** (9/8): Coffee & calm vibes β˜•οΈ + +`3376ee87-...` β€” woman against tiled wall +- **minicpm-v-4-5** (7/8): azulejo dreams. +- **qwen3vl-4b** (9/8): Lost in the tiles. 🌿 +- **qwen3vl-8b** (9/8): Blue tiles, golden light, and a moment of quiet grace. + +`4f2fea45-...` β€” courtyard +- **minicpm-v-4-5** (7/8): hidden gems of seville +- **qwen3vl-4b** (7/8): Timeless beauty in a Spanish courtyard. 🌿 +- **qwen3vl-8b** (7/8): A serene courtyard in Seville, where palm trees sway under the sun. + +`ea713729-...` β€” flower-market street (qwen3vl-4b confused location) +- **minicpm-v-4-5** (7/8): Seville's hidden gems. +- **qwen3vl-4b** (7/8): Walking through *Barcelona's* colorful streets, backlit by golden hour. +- **qwen3vl-8b** (7/8): Walking through Seville's vibrant streets, lavender in hand. + +The full list of 10 sample sets is in the auto-generated section +below; the raw 300-row JSON is at `benchmark-2026-05-10-1424.json` +in this directory. + +## Operational cost during the run + +- llama-swap pod (1Γ— T4 wholly allocated for the duration): ~33 min. +- Immich-ML downtime: ~33 min. New uploads weren't auto-tagged or + CLIP-embedded during this window. No user-visible impact (Immich + search against already-indexed assets still worked via pgvector). +- Network egress: zero β€” Immich originals stayed on the LAN, all + scoring traffic was in-cluster. + +## Reproducibility + +```bash +DATA_DIR=/tmp/benchmark \ + IMMICH_API_KEY=… \ + LLAMA_SWAP_URL=http://localhost:18080 \ + poetry run python -m instagram_poster.benchmark run \ + --album-id 46565b85-7580-4ac1-91a6-1ece2cf8634d \ + --models qwen3vl-8b,minicpm-v-4-5,qwen3vl-4b \ + --limit 100 --random-seed 42 --run-id 2026-05-10-1424 +``` + +The same `--random-seed` reproduces the photo sample exactly. Prompt +version `4bbb7e7721da24d9` is the SHA-256 of the system prompt + user +prompt + GBNF grammar; rerunning under the same prompt version against +the same seed should produce within-noise identical scores (the models +themselves are temperature=0, top_k=1). + +## Next steps + +- **Wire `qwen3vl-4b` into `instagram-poster`** as an additional ranking + signal alongside CLIP-based recency in `/candidates`. Cache the score + per asset_id so we don't re-pay 4 s on every list refresh. +- **Bump k8s-node1 RAM** so immich-ml + llama-swap can co-exist (drain + β†’ resize β†’ uncordon, with kubelet `systemReserved` adjusted in + `stacks/infra/main.tf`). +- **Re-benchmark with shared GPU** once node1 RAM is bumped, to get + realistic latency numbers when the T4 is also under load from + immich-ml and frigate. +- **Front llama-swap with LiteLLM** so Home Assistant and any other + consumer can hit one OpenAI-compat gateway. Track separately. + +--- + +## Auto-generated report + +Below is the unedited output of `python -m instagram_poster.benchmark +report --run-id 2026-05-10-1424`, kept for diff-checking against +future runs. + +### Per-model summary + +| model | n | parse_ok % | error % | p50 latency | p95 latency | median IG-fit | median aesthetic | +|-------|---|-----------|--------|------------|-------------|--------------|------------------| +| minicpm-v-4-5 | 100 | 100.0 | 0.0 | 5617 ms | 5998 ms | 7.0 | 8.0 | +| qwen3vl-4b | 100 | 100.0 | 0.0 | 3552 ms | 4063 ms | 8.0 | 8.0 | +| qwen3vl-8b | 100 | 100.0 | 0.0 | 5981 ms | 6637 ms | 7.0 | 8.0 | + +### Score histograms (instagram_fit_score 1–10) + +#### minicpm-v-4-5 +``` + 1: (0) 2: (0) 3: (0) 4: (0) 5: (0) + 6: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (7) + 7: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (65) + 8: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (19) + 9: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (9) +10: (0) +``` + +#### qwen3vl-4b +``` + 1: (0) 2: (0) 3: (0) 4: (0) 5: (0) + 6: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (5) + 7: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (16) + 8: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (32) + 9: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (47) +10: (0) +``` + +#### qwen3vl-8b +``` + 1: (0) 2: (0) 3: (0) 4: (0) 5: (0) + 6: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (11) + 7: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (55) + 8: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (17) + 9: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ (17) +10: (0) +``` + +### Top-10 by IG-fit per model β€” see `benchmark-2026-05-10-1424.json` + +(Tables omitted from the curated report; available in the JSON dump +alongside this file.) diff --git a/docs/benchmarks/benchmark-2026-05-10-1424.json b/docs/benchmarks/benchmark-2026-05-10-1424.json new file mode 100644 index 00000000..e72e3537 --- /dev/null +++ b/docs/benchmarks/benchmark-2026-05-10-1424.json @@ -0,0 +1,7949 @@ +[ + { + "run_id": "2026-05-10-1424", + "asset_id": "9f9c9faf-6bce-4ceb-a1b5-e63179c55990", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man at ornate arch", + "scene_tags": [ + "seville", + "arch", + "palm trees", + "blue sky", + "garden", + "travel", + "architecture", + "portrait" + ], + "suggested_caption": "Standing in Seville\u2019s magic, framed by history and color.", + "reasoning": "Strong vertical framing with arch as natural frame, vibrant colors, and clear subject draw immediate attention.", + "latency_ms": 37886, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fec017d6-54cc-4ee9-89f8-6dd0109e6603", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "curly-haired woman", + "scene_tags": [ + "indoor", + "plants", + "window", + "denim", + "portrait", + "natural_light", + "casual", + "smile" + ], + "suggested_caption": "Sunlight, curls, and a cozy corner.", + "reasoning": "Strong subject with warm light and texture, but slightly off-center framing reduces IG impact.", + "latency_ms": 4969, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0d53158b-5a17-4ecc-8e92-0195fb6b12a7", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "Metropol Parasol", + "scene_tags": [ + "seville", + "architecture", + "blue_sky", + "modern", + "historic", + "sunset", + "canopy", + "spain" + ], + "suggested_caption": "The Metropol Parasol in Seville, where modern meets historic under a brilliant sky.", + "reasoning": "Strong diagonal composition and vibrant blue sky create visual impact, perfect for IG\u2019s vertical scroll.", + "latency_ms": 5271, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "23137c1c-f475-4b9a-8c72-e86c90f8f064", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man with coffee drinks", + "scene_tags": [ + "cafe", + "matcha", + "latte", + "smile", + "indoor", + "wooden_table", + "paper_lamp", + "relaxed" + ], + "suggested_caption": "Coffee & calm vibes \u2615\ufe0f", + "reasoning": "Strong vertical composition with warm lighting and engaging subject, perfect for IG scroll-stopping aesthetic.", + "latency_ms": 5297, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3376ee87-8bf5-4710-88e0-f0d89b3587fc", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman against tiled wall", + "scene_tags": [ + "tiled_wall", + "blue_dress", + "curly_hair", + "andalusian", + "portrait", + "travel", + "elegant", + "south_europe" + ], + "suggested_caption": "Blue tiles, golden light, and a moment of quiet grace.", + "reasoning": "Strong vertical composition with vibrant, patterned background and subject\u2019s confident gaze \u2014 highly scroll-stopping.", + "latency_ms": 5495, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4f2fea45-3119-4df2-bca8-d35a85fd1aa9", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "courtyard with palm trees", + "scene_tags": [ + "seville", + "palm trees", + "courtyard", + "fountain", + "arches", + "garden", + "sunset", + "historic" + ], + "suggested_caption": "A serene courtyard in Seville, where palm trees sway under the sun.", + "reasoning": "Strong composition with vibrant colors and vertical framing, but slightly cluttered foreground reduces Instagram appeal.", + "latency_ms": 5430, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e49bb267-b7da-4528-a37e-aa92770a0271", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "cityscape", + "stone wall", + "curly hair", + "blue dress", + "overcast", + "travel", + "portrait", + "elegant" + ], + "suggested_caption": "Standing tall in the city, blue against the sky.", + "reasoning": "Strong subject with vibrant blue dress contrasting muted cityscape, but overcast sky reduces visual pop for IG.", + "latency_ms": 5721, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2df74bf4-e363-4c43-a0ea-8077666229f6", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "garden", + "fountain", + "roses", + "stone", + "people", + "greenery", + "outdoor", + "elegant" + ], + "suggested_caption": "Blue in the garden, surrounded by roses and stone.", + "reasoning": "Strong composition with framing and color contrast, but slightly cluttered background reduces IG impact.", + "latency_ms": 5503, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "750f9142-5e86-468a-89db-e9f28d6aac05", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman by pool with ducks", + "scene_tags": [ + "pool", + "ducks", + "sunlight", + "tiles", + "brick wall", + "mediterranean", + "relaxing", + "summer" + ], + "suggested_caption": "Sun-drenched moments by the pool with unexpected duck guests \ud83e\udd86", + "reasoning": "Strong composition with warm light and vibrant tiles, but slightly cluttered framing reduces IG scroll-stopping power.", + "latency_ms": 5679, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 118 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ea713729-51b7-4005-834b-bd3064455928", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in lavender walking", + "scene_tags": [ + "seville", + "architecture", + "street", + "lunch", + "purple", + "sunset", + "people", + "european" + ], + "suggested_caption": "Walking through Seville\u2019s vibrant streets, lavender in hand.", + "reasoning": "Strong vertical composition with colorful architecture and a stylish subject, but slightly busy background reduces IG impact.", + "latency_ms": 5424, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b0734c0-589c-451a-a41f-8fc45d757ccc", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tiled archway", + "andalusian", + "blue dress", + "travel", + "portrait", + "art", + "doorway", + "elegant" + ], + "suggested_caption": "Standing in a doorway of art and history.", + "reasoning": "Strong composition with vibrant tiles framing the subject, but slightly cluttered background reduces Instagram scroll-stopping power.", + "latency_ms": 5479, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e6ebf7b0-7f4d-40b3-919e-3986cbd595fe", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "seville plaza architecture", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "sunset", + "carriage", + "spain", + "historical", + "sunset" + ], + "suggested_caption": "Seville\u2019s Plaza de Espa\u00f1a, where history meets the sun.", + "reasoning": "Strong architectural composition and vibrant colors, but slightly cluttered foreground and vertical framing limits Instagram impact.", + "latency_ms": 5378, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ee9d68c9-e20c-45a9-8d69-7fe7cecda6c6", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "modern architecture", + "scene_tags": [ + "seville", + "architecture", + "solarium", + "blue sky", + "urban", + "sunset", + "southern europe", + "modern" + ], + "suggested_caption": "Sculpted light and shadow in Seville\u2019s Metropol Parasol.", + "reasoning": "Strong architectural composition with dynamic shadows, but slightly cluttered foreground and vertical framing limits scroll-stopping impact.", + "latency_ms": 5697, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 117 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "eade13f0-608b-4e5b-a11c-610287226371", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "blue dress", + "sunset", + "architecture", + "travel", + "spain", + "bridge" + ], + "suggested_caption": "Sunset at the Plaza de Espa\u00f1a, Seville.", + "reasoning": "Strong vertical framing with vibrant colors and iconic architecture, but slightly soft focus on subject.", + "latency_ms": 5415, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "75cfcb0b-fd7b-4c03-a399-f6253e3db200", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "bullring overlooking ocean", + "scene_tags": [ + "malaga", + "bullring", + "ocean", + "cityscape", + "trees", + "overlook", + "cloudy", + "path" + ], + "suggested_caption": "Bullring view from the hillside path.", + "reasoning": "Strong composition with natural framing, but muted colors and cloudy sky reduce visual punch for Instagram.", + "latency_ms": 5598, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6d2920c8-08d1-4bef-9abc-bc91c446570f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "arches", + "fountain", + "sunlight", + "greenery", + "travel", + "elegant", + "mediterranean" + ], + "suggested_caption": "Sun-drenched moments in a hidden courtyard.", + "reasoning": "Strong composition with warm tones and clear subject, but slightly busy background reduces IG impact.", + "latency_ms": 5378, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c2769ba4-f2c0-49c1-a4b8-6ce0e083f8ec", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "historic town hall", + "scene_tags": [ + "seville", + "architecture", + "sunset", + "bicycle", + "flags", + "palm", + "staircase", + "european" + ], + "suggested_caption": "Seville\u2019s grand town hall, bathed in golden hour light.", + "reasoning": "Strong architectural composition with warm lighting, but the bicycle sign and modern elements slightly distract from the classic aesthetic.", + "latency_ms": 5772, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "17905afc-be7f-4664-948a-1c9da287b703", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "seville", + "courtyard", + "palm trees", + "flowers", + "architecture", + "travel", + "garden", + "blue dress" + ], + "suggested_caption": "Lost in the beauty of Seville\u2019s Alc\u00e1zar gardens.", + "reasoning": "Strong composition with vibrant colors and cultural context, but slightly busy background reduces Instagram scroll-stopping power.", + "latency_ms": 5443, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "40f82498-2e9c-4b98-8ebb-ed9821c179a0", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "urban street scene", + "scene_tags": [ + "marseille", + "architecture", + "sky", + "cars", + "street", + "modern", + "historic", + "bicycles" + ], + "suggested_caption": "Marseille\u2019s vibrant mix of old and new under a bright blue sky.", + "reasoning": "Strong composition with varied architecture and sky, but cluttered foreground and lack of a clear focal point reduce Instagram appeal.", + "latency_ms": 5691, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5a879592-e59b-4a79-8886-dc089e301f5a", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "sunset", + "architecture", + "travel", + "blue", + "sunset", + "elegant" + ], + "suggested_caption": "Seville\u2019s magic in one frame \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong vertical composition with vibrant colors and iconic architecture, perfect for IG scroll-stopping appeal.", + "latency_ms": 5828, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "885508f8-f39b-484e-8959-929111ab0b0d", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "bridge", + "blue dress", + "sun", + "architecture", + "canal", + "tourist" + ], + "suggested_caption": "Standing in the heart of Seville\u2019s Plaza de Espa\u00f1a.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, but slightly busy background reduces Instagram scroll-stopping power.", + "latency_ms": 5758, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90b60141-efa8-4a34-8e0a-dda28f296f58", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "flowers", + "bench", + "portuguese", + "architecture", + "summer", + "elegant", + "travel" + ], + "suggested_caption": "Blue dress, pink blooms, and sun-dappled stone. Portugal\u2019s charm in motion.", + "reasoning": "Strong composition with vibrant colors and cultural details, but slightly off-center subject reduces IG impact.", + "latency_ms": 5872, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "876f997c-e9be-40e2-8482-ea0216b82d5a", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man on ornate bench", + "scene_tags": [ + "greenery", + "bench", + "portrait", + "outdoor", + "blue_shirt", + "nature", + "casual", + "serene" + ], + "suggested_caption": "Chillin' in the greenery, just me and the vines.", + "reasoning": "Strong composition with natural light and vibrant green backdrop, but slightly muted colors and no immediate visual hook for IG scroll.", + "latency_ms": 6140, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d37f1824-5d53-41ca-8c79-ffae48978442", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "garden", + "fountain", + "columns", + "blue_dress", + "flowers", + "arches", + "serene" + ], + "suggested_caption": "Lost in the beauty of ancient stone and blooms.", + "reasoning": "Strong composition with vibrant colors and classic architecture, but slightly cluttered foreground reduces IG impact.", + "latency_ms": 5951, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7a13fad2-6ef9-44ea-944c-551e854b6acd", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "cityscape", + "curly_hair", + "blue_dress", + "stone_wall", + "overlook", + "cloudy", + "travel" + ], + "suggested_caption": "Blue against the city. \ud83c\udf06", + "reasoning": "Strong vertical framing with vibrant blue dress contrasting muted cityscape, instantly engaging for IG scroll.", + "latency_ms": 6211, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "64ebfd3c-e9a1-49c2-9d0c-a81182ef6af2", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tiled_wall", + "blue_dress", + "curly_hair", + "portrait", + "travel", + "mediterranean", + "gold_accessories", + "smile" + ], + "suggested_caption": "Blue tiles, golden light, and a little joy.", + "reasoning": "Strong composition with vibrant, harmonious colors and a captivating subject, but slightly less vertical framing for IG scroll stops.", + "latency_ms": 6130, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d211ea44-4f3c-44d0-b7f0-cb9d001f07af", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in flowing dress", + "scene_tags": [ + "tropical", + "greenery", + "sunlight", + "corridor", + "dress", + "portrait", + "outdoor", + "vines" + ], + "suggested_caption": "Dancing in the dappled light \ud83c\udf3f", + "reasoning": "Strong subject and vibrant colors with dynamic lighting, but slightly off-center framing reduces IG impact.", + "latency_ms": 5586, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "30015fce-9f43-430e-8268-36cb4cb56596", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman with curly hair", + "scene_tags": [ + "garden", + "sunlight", + "curly hair", + "earrings", + "outdoor", + "portrait", + "greenery", + "relaxing" + ], + "suggested_caption": "Sun-kissed moments in the garden.", + "reasoning": "Strong portrait with warm light and natural beauty, but slightly off-center framing reduces IG impact.", + "latency_ms": 5714, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9842a059-f560-4243-9710-84a9ef7ee71e", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man at seville plaza", + "scene_tags": [ + "seville", + "plaza", + "bridge", + "sunset", + "architecture", + "travel", + "spain", + "canal" + ], + "suggested_caption": "Sunset at the Plaza de Espa\u00f1a, Seville.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, but subject placement slightly off-center reduces impact.", + "latency_ms": 5796, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f26f6930-16a5-400f-ab7c-ff19abde8ef3", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "bridge", + "blue dress", + "sunset", + "architecture", + "canal", + "tourist" + ], + "suggested_caption": "Blue dress, blue sky, and the best view in Seville.", + "reasoning": "Strong vertical framing with vibrant colors and iconic architecture, but slightly busy background reduces perfection.", + "latency_ms": 5754, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d99cf40e-3bed-47f7-8595-c11286ab3a6a", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman admiring plaza", + "scene_tags": [ + "seville", + "plaza", + "tower", + "sunset", + "travel", + "architecture", + "blue", + "column" + ], + "suggested_caption": "Standing in awe of Seville\u2019s beauty.", + "reasoning": "Strong vertical composition with clear subject and iconic architecture, bright colors and clean lines make it scroll-stopping.", + "latency_ms": 5801, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2e199e4b-3fb5-442f-895e-3ab7ba9ccdaf", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "ornate islamic architecture", + "scene_tags": [ + "mosque", + "marrakech", + "arabic", + "geometric", + "ornate", + "blue", + "gold", + "detail" + ], + "suggested_caption": "The intricate beauty of Moroccan craftsmanship.", + "reasoning": "Richly detailed Islamic patterns with strong vertical framing, but slightly busy for quick-scroll IG appeal.", + "latency_ms": 5503, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "13dc549f-8aee-41b4-92b8-954b5bc41fb2", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "flamenco stage performance", + "scene_tags": [ + "theater", + "flamenco", + "stage", + "audience", + "purple_light", + "guitar", + "suits", + "applause" + ], + "suggested_caption": "Flamenco magic at Teatro Flamenco Sevilla. The energy was electric.", + "reasoning": "Strong stage lighting and vibrant colors create drama, while the audience's raised hands add immediacy for IG engagement.", + "latency_ms": 6356, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 121 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "144aadc1-0e9c-46c7-80dd-8decd901e4ee", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman with curly hair", + "scene_tags": [ + "flowers", + "greenery", + "portrait", + "outdoor", + "curly hair", + "denim", + "bougainvillea", + "smile" + ], + "suggested_caption": "Lost in the bloom \ud83c\udf38", + "reasoning": "Vibrant floral backdrop contrasts beautifully with subject, strong vertical framing and engaging gaze create instant IG appeal.", + "latency_ms": 5804, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3c464a1a-ab0e-4703-9bcd-37ccb17f8dac", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly-haired woman", + "scene_tags": [ + "street", + "sunlight", + "urban", + "sunglasses", + "denim", + "green_bag", + "trees", + "casual" + ], + "suggested_caption": "sunshine & street style", + "reasoning": "Strong subject with vibrant colors and natural light, but slightly cluttered background reduces visual impact.", + "latency_ms": 5487, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 104 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0f816473-c0f5-44eb-96a1-9c982f7f0343", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "palm trees", + "garden", + "sunset", + "elegant", + "andalusian", + "travel", + "outdoor", + "portrait" + ], + "suggested_caption": "Blue dress, palm trees, and endless skies. \ud83c\udf34", + "reasoning": "Strong composition with vibrant blue dress against lush greenery, but slightly cluttered background reduces IG impact.", + "latency_ms": 5957, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "891f2361-7c42-4163-b37a-c11f7f7126f2", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "stairs", + "sunset", + "architecture", + "travel", + "blue", + "sunset", + "elegant" + ], + "suggested_caption": "blue dress, blue sky, blue tiles. seville magic.", + "reasoning": "Strong vertical composition with vibrant colors and detailed architecture, but slightly busy background reduces impact.", + "latency_ms": 5851, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "711f44c3-d2f8-4878-b587-4863e268dd3c", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "wooden bar interior", + "scene_tags": [ + "bar", + "wooden", + "chairs", + "wine", + "warm", + "industrial", + "european", + "cozy" + ], + "suggested_caption": "Warm wood, vintage charm, and a quiet corner waiting for you.", + "reasoning": "Rich textures and warm lighting create inviting atmosphere, but framing feels slightly cluttered for IG\u2019s vertical scroll.", + "latency_ms": 5949, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "baf172dd-da76-4c3c-80b6-99382aeb4a72", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in flowing dress", + "scene_tags": [ + "greenery", + "archway", + "sunlight", + "stone walkway", + "vines", + "dress", + "portrait", + "serene" + ], + "suggested_caption": "Dancing through sunlight and vines.", + "reasoning": "Strong composition with natural light and vibrant greenery, but slightly busy framing reduces IG scroll-stopping power.", + "latency_ms": 5688, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6a918ad8-de2d-48e9-a378-c7038c9e5178", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "art_gallery", + "portrait", + "blue_dress", + "museum", + "curly_hair", + "elegant", + "classic", + "still_life" + ], + "suggested_caption": "Standing in front of a masterpiece, lost in thought.", + "reasoning": "Strong composition with vibrant blue dress against warm tones, but slightly off-center framing reduces IG impact.", + "latency_ms": 5915, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4b09475f-0eee-46ba-a558-1f0cd3ecd473", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in ornate room", + "scene_tags": [ + "historic", + "tiles", + "wooden beams", + "blue dress", + "interior", + "architectural", + "warm light", + "elegant" + ], + "suggested_caption": "Lost in the beauty of old-world charm.", + "reasoning": "Strong composition with warm lighting and rich textures, but vertical framing slightly compromises the depth of the hallway.", + "latency_ms": 5872, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ff2de652-1f1a-4d5c-a7ee-28166ce7118f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "horse-drawn carriage", + "scene_tags": [ + "horse", + "carriage", + "street", + "trees", + "sunny", + "european", + "cobblestone", + "urban" + ], + "suggested_caption": "A classic horse-drawn carriage glides through a sun-dappled European street.", + "reasoning": "Strong composition with vibrant yellow wheels and white horse, but slightly cluttered background reduces Instagram appeal.", + "latency_ms": 5978, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "852f15e1-94f2-49db-8205-218c85d0a43f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "seville plaza architecture", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "spain", + "sunset", + "bridge", + "flag", + "historical" + ], + "suggested_caption": "The Plaza de Espa\u00f1a, Seville \u2014 where history meets vibrant color.", + "reasoning": "Strong architectural composition and vivid colors make it visually striking, but the wide-angle framing lacks tight focus for IG scroll-stopping impact.", + "latency_ms": 6229, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c869757b-8734-4a8d-8dfb-fad070bf7be1", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "woman walking toward historic gate", + "scene_tags": [ + "andalusian architecture", + "alcazar", + "sunset", + "tourists", + "stone tower", + "sunset", + "sunset", + "sunset" + ], + "suggested_caption": "Walking through history in the Alcazar of Seville", + "reasoning": "Strong architectural subject with clear sky, but composition is slightly cluttered with tourists and lacks a strong visual hook.", + "latency_ms": 6170, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3ba4c50c-6ec4-41b1-bb2b-e9d4eea108f6", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "nighttime cathedral", + "scene_tags": [ + "seville", + "cathedral", + "night", + "statue", + "trees", + "streetlight", + "architecture", + "warm_light" + ], + "suggested_caption": "Seville\u2019s cathedral at night \u2014 timeless beauty under warm lights.", + "reasoning": "Strong architectural subject with warm lighting, but low-res noise and cluttered foreground reduce visual impact.", + "latency_ms": 5667, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e5fc776e-8467-4805-8c35-77383f62d76d", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "woman in flowing dress", + "scene_tags": [ + "green walls", + "sunlight", + "doorway", + "tiled floor", + "curly hair", + "dress", + "outdoor", + "vintage" + ], + "suggested_caption": "Sunlight through the leaves, dancing on my dress.", + "reasoning": "Strong subject and warm lighting, but slightly off-center framing and muted colors reduce overall impact.", + "latency_ms": 5897, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b1a8b354-f9a4-42db-9639-44fd9ecbdd33", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "seville plaza architecture", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "sunset", + "people", + "bridge", + "historical", + "sunset" + ], + "suggested_caption": "Sunset over Seville\u2019s Plaza de Espa\u00f1a", + "reasoning": "Strong architectural composition and vibrant colors, but slightly busy foreground and wide-angle framing reduce Instagram scroll-stopping power.", + "latency_ms": 6310, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ba6f613c-61cd-42a7-aaa9-374d4f0ac058", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man posing by ornate bridge", + "scene_tags": [ + "seville", + "spain", + "bridge", + "architecture", + "sunset", + "travel", + "blue", + "water" + ], + "suggested_caption": "Sunset in Seville. Architecture & vibes.", + "reasoning": "Strong composition with vibrant colors and iconic landmark, but subject placement slightly off-center reduces impact.", + "latency_ms": 6114, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "82391768-2834-4843-9cdd-249bd6780f91", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "fried dumplings", + "scene_tags": [ + "dumplings", + "restaurant", + "wooden_table", + "food", + "closeup", + "indoor", + "sushi", + "appetizer" + ], + "suggested_caption": "Golden dumplings with a tangy twist.", + "reasoning": "Strong food composition with warm tones and shallow depth of field, but slightly off-center framing reduces IG impact.", + "latency_ms": 6637, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "01292c70-996c-43cd-b132-5933d3afbf43", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "flowers", + "arches", + "travel", + "blue dress", + "white walls", + "garden", + "elegant" + ], + "suggested_caption": "Lost in the beauty of a Spanish courtyard.", + "reasoning": "Vibrant flowers and strong vertical framing make it visually engaging, but the subject\u2019s back and casual composition slightly reduce its portfolio appeal.", + "latency_ms": 6542, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "edb6e566-0350-4861-ae89-e32ddcfd4f14", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "andalusian", + "courtyard", + "fountain", + "sunlight", + "potted plants", + "arched walls", + "travel", + "elegant" + ], + "suggested_caption": "Sun-dappled moments in the Alhambra\u2019s gardens.", + "reasoning": "Strong composition with warm tones and clear subject, but slightly busy background reduces IG scroll-stopping power.", + "latency_ms": 6631, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 118 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b9c7f1d5-7336-4860-a38a-c3e1d82ee655", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman with curly hair", + "scene_tags": [ + "street", + "sunglasses", + "curly hair", + "phone", + "sunlight", + "casual", + "outdoor", + "travel" + ], + "suggested_caption": "sunshine, curls, and a little wanderlust.", + "reasoning": "Strong vertical framing and warm light highlight the subject\u2019s vibrant curls, creating an instantly engaging, scroll-stopping aesthetic.", + "latency_ms": 6223, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "967b48e8-531a-4bef-a069-fab60690145f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "pizzeria interior", + "scene_tags": [ + "pizzeria", + "oven", + "lemons", + "italian", + "food", + "glasscase", + "artisan", + "vibrant" + ], + "suggested_caption": "Warm, wood, and wood-fired. The soul of Naples in every slice.", + "reasoning": "Rich colors and layered composition draw the eye, but the horizontal framing and cluttered foreground slightly reduce IG scroll-stopping power.", + "latency_ms": 6675, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 122 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b68453c0-f5a3-4e8e-b231-af92fa2ed182", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "tiled floor", + "blue dress", + "sunlight", + "elegant", + "architecture", + "outdoor", + "portrait" + ], + "suggested_caption": "Blue dress, warm light, timeless elegance.", + "reasoning": "Strong subject and color harmony, but composition feels slightly off-center and lacks a strong visual hook for IG scrolling.", + "latency_ms": 6393, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7f9762e4-afb1-45f5-85f0-fd33e050ed23", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man on ornate bench", + "scene_tags": [ + "garden", + "bench", + "greenery", + "portrait", + "casual", + "outdoor", + "blue_shirt", + "vines" + ], + "suggested_caption": "Chillin' in the greenery \ud83c\udf3f", + "reasoning": "Strong composition with natural light and vibrant greenery, but the subject\u2019s pose is slightly casual for a high-impact IG post.", + "latency_ms": 6708, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c61412cb-4abc-4d1c-b541-f1d67adc3b03", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "ancient wall", + "palm tree", + "cobblestone", + "blue dress", + "medieval", + "outdoor", + "travel", + "elegant" + ], + "suggested_caption": "Blue against the old stones.", + "reasoning": "Strong color contrast and textured backdrop, but slightly muted lighting and casual pose reduce IG impact.", + "latency_ms": 6284, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4719aae4-0783-447a-afc2-9f84c7eca3d1", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman admiring plaza", + "scene_tags": [ + "seville", + "plaza", + "tower", + "sun", + "travel", + "architecture", + "blue_sky", + "curly_hair" + ], + "suggested_caption": "Standing in awe of Seville\u2019s beauty. \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong composition with the tower as focal point, but subject placement slightly off-center reduces impact.", + "latency_ms": 6069, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ae8d0f5-432d-40ae-bf24-36aebb8977d0", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "cathedral", + "street", + "sunset", + "travel", + "architecture", + "curly_hair", + "blue_dress" + ], + "suggested_caption": "Blue dress, warm sun, and history in Seville.", + "reasoning": "Strong vertical framing with vibrant blue dress against historic architecture, but slightly busy background reduces impact.", + "latency_ms": 6113, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f32a27d2-44e9-41fe-acd3-b581825b7d37", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man posing by ornate bridge", + "scene_tags": [ + "seville", + "plaza", + "bridge", + "sunset", + "architecture", + "travel", + "sunset", + "water" + ], + "suggested_caption": "Sunset at the Plaza de Espa\u00f1a, Seville.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, but slightly cluttered foreground and less dynamic framing for IG scroll.", + "latency_ms": 5853, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "309a7b9a-ab2a-44b6-98d7-a026f3f9ad2d", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman overlooking garden", + "scene_tags": [ + "garden", + "palm trees", + "archway", + "sunset", + "travel", + "greenery", + "andalusian", + "balcony" + ], + "suggested_caption": "Gazing through the arch at paradise.", + "reasoning": "Strong composition with arch framing, vibrant colors, and clear subject, but slightly cluttered background reduces IG impact.", + "latency_ms": 5915, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "af98052f-97e1-4c37-a719-55fa6f6a5bab", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "palm tree", + "flowers", + "arches", + "garden", + "blue dress", + "sunset", + "travel" + ], + "suggested_caption": "Lost in the beauty of Andalusia \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong composition with vibrant colors and cultural architecture, but slightly cluttered foreground reduces Instagram scroll-stopping power.", + "latency_ms": 5795, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "556dce46-6930-40fa-b1ee-6b58f1967aa0", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "historic staircase", + "mosaic floor", + "tiled walls", + "indoor", + "elegant", + "travel", + "architecture", + "portrait" + ], + "suggested_caption": "Blue dress, ancient tiles, and timeless beauty. \ud83c\udf3f", + "reasoning": "Strong composition with vibrant blue dress against ornate backdrop, but slightly cluttered foreground and less dynamic framing for IG scroll.", + "latency_ms": 5975, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f6fe897c-9c59-4d5c-8026-f532b131e800", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "seville", + "courtyard", + "palm trees", + "garden", + "arches", + "blue dress", + "sunlight", + "travel" + ], + "suggested_caption": "Lost in the magic of Seville\u2019s Alc\u00e1zar gardens.", + "reasoning": "Strong composition with vibrant colors and cultural architecture, but slightly cluttered foreground reduces Instagram scroll-stopping power.", + "latency_ms": 5905, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d4a4990f-30ac-4378-a20c-0b1083883665", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "tower", + "sunset", + "sunglasses", + "travel", + "architecture", + "bridge" + ], + "suggested_caption": "Sunset at the Plaza de Espa\u00f1a, Seville.", + "reasoning": "Strong vertical framing with clear subject and iconic architecture, bright colors and clean lines make it scroll-stopping.", + "latency_ms": 5981, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e71b31a1-bd05-418b-bfe1-d7dcbc8398ed", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "blooming flowers on building", + "scene_tags": [ + "flowers", + "architecture", + "sunset", + "vibrant", + "spain", + "doorway", + "purple", + "bougainvillea" + ], + "suggested_caption": "Color explodes against white walls. \ud83c\udf38", + "reasoning": "Vibrant bougainvillea against white walls and blue sky creates strong visual appeal, though slightly cluttered framing reduces IG scroll-stopping power.", + "latency_ms": 6552, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 124 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "60d9defc-36a6-439d-81bb-3f446972bf14", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "coastal cityscape view", + "scene_tags": [ + "malaga", + "harbor", + "cloudy", + "palm trees", + "gardens", + "city", + "sea", + "walkers" + ], + "suggested_caption": "Cloudy day over Malaga\u2019s harbor \u2014 quiet and cinematic.", + "reasoning": "Strong composition with layered depth, but muted colors and overcast sky reduce visual punch for IG.", + "latency_ms": 6696, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ad632dce-c371-4166-8490-27e60fcea65a", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "staircase", + "arches", + "sunlight", + "travel", + "blue dress", + "historic", + "curly hair" + ], + "suggested_caption": "Staircase moments in Seville \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong composition with vibrant blue dress against warm architecture, but slightly busy background reduces IG impact.", + "latency_ms": 6397, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "38f26552-7b4e-4488-880d-a90e9f5453e7", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate european building", + "scene_tags": [ + "architecture", + "sunset", + "balcony", + "european", + "urban", + "detail", + "blue sky", + "ornate" + ], + "suggested_caption": "Sunset on a classic European street.", + "reasoning": "Strong architectural detail and warm lighting, but slightly tilted angle and cluttered foreground reduce IG impact.", + "latency_ms": 6060, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "efaf5b66-243e-462f-9d5e-ea90fee3c61b", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "historic town hall", + "scene_tags": [ + "spain", + "architecture", + "palm trees", + "blue sky", + "bicycle parking", + "classical", + "sunny", + "staircase" + ], + "suggested_caption": "Grandeur in the sun. \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong architectural subject with vibrant sky, but foreground sign slightly distracts from vertical composition.", + "latency_ms": 6081, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "067e963d-265e-48f5-a4b4-75da4402043c", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "garden", + "curly_hair", + "blue_dress", + "flowers", + "courtyard", + "sunlight", + "portrait", + "tropical" + ], + "suggested_caption": "Sunlight and blooms in the courtyard.", + "reasoning": "Strong subject with vibrant garden backdrop, but slightly cluttered framing and muted colors reduce overall impact.", + "latency_ms": 5900, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "460b6b6d-ec7c-424b-a899-23c5975039f6", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman at historic fortress", + "scene_tags": [ + "fortress", + "cityscape", + "mountains", + "curly_hair", + "blue_dress", + "green_trees", + "overcast", + "travel" + ], + "suggested_caption": "Chasing sunsets from ancient walls \ud83c\udf04", + "reasoning": "Strong vertical framing with subject in foreground, but muted lighting and busy background slightly reduce aesthetic impact.", + "latency_ms": 6368, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a56ee545-2409-49d7-a289-97f2d6f75ca6", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple selfie", + "scene_tags": [ + "couple", + "selfie", + "cityscape", + "overcast", + "travel", + "coast", + "curly_hair", + "portrait" + ], + "suggested_caption": "Two souls, one view. \ud83c\udf06", + "reasoning": "Strong vertical framing with engaging subjects, but muted lighting and busy background slightly reduce aesthetic impact.", + "latency_ms": 6465, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ed528a9-109c-4855-b3c3-ab81b404f856", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "andalusian", + "courtyard", + "sunlight", + "architecture", + "potted plants", + "stone arches", + "travel", + "elegant" + ], + "suggested_caption": "Sun-drenched elegance in the Andalusian courtyard.", + "reasoning": "Strong composition with warm tones and clear subject, but slightly busy background reduces IG scroll-stopping power.", + "latency_ms": 6227, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8ae46e84-d601-4345-bdb1-f6771f388dc1", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "flowers", + "building", + "portrait", + "blue dress", + "bougainvillea", + "outdoor", + "sunset", + "elegant" + ], + "suggested_caption": "Dressed for the blooms.", + "reasoning": "Vibrant floral backdrop with strong vertical framing and subject in flowing dress creates visual harmony and Instagram appeal.", + "latency_ms": 6003, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1fb7f2c9-2e63-47a0-b59e-ed32de4d6fd5", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza", + "sunset", + "sunset", + "sunset", + "sunset", + "sunset", + "sunset" + ], + "suggested_caption": "Sunset in Seville, Spain \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong vertical framing with clear subject and iconic architecture, bright colors and good contrast, but repeated 'sunset' tags are inaccurate for daytime photo.", + "latency_ms": 6579, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f9f81d70-0e5e-4e07-933c-6e97e3aa22c7", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "historic street architecture", + "scene_tags": [ + "seville", + "sunset", + "street", + "architecture", + "people", + "cafe", + "blue sky", + "tiled dome" + ], + "suggested_caption": "Sunset in Seville, where history meets the everyday.", + "reasoning": "Strong architectural subject with warm lighting, but slightly cluttered foreground reduces Instagram appeal.", + "latency_ms": 5650, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c63f60bb-2c2a-4ebc-b4e5-bd108a7e5e60", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "couple in elevator", + "scene_tags": [ + "elevator", + "couple", + "selfie", + "metallic", + "urban", + "smile", + "mirror", + "casual" + ], + "suggested_caption": "Caught in the elevator, just us and the city\u2019s heartbeat.", + "reasoning": "Strong subject and vertical framing, but harsh lighting and cluttered background reduce visual appeal.", + "latency_ms": 5928, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 110 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9fc4be6d-dc08-457c-9f5a-1606fb96dd97", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple kissing on cliff", + "scene_tags": [ + "barcelona", + "selfie", + "cityscape", + "greenery", + "cloudy", + "romantic", + "travel", + "coastal" + ], + "suggested_caption": "Kiss from the top of the world \ud83c\udf04", + "reasoning": "Strong romantic moment with scenic backdrop, but overcast light and selfie framing slightly reduce visual polish.", + "latency_ms": 6201, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1d7f8084-eb2e-41e4-a380-d0983f6807e2", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man admiring view", + "scene_tags": [ + "barcelona", + "sky", + "cityscape", + "overcast", + "hill", + "travel", + "reflection", + "urban" + ], + "suggested_caption": "Feeling grateful for the view from the top.", + "reasoning": "Strong vertical framing with subject looking up, but overcast sky reduces color vibrancy and visual punch.", + "latency_ms": 6274, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f638054c-bad8-4ac1-83c2-1b0f5149fc76", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "flamenco performers on stage", + "scene_tags": [ + "seville", + "flamenco", + "stage", + "guitar", + "theater", + "performance", + "purple_light", + "audience" + ], + "suggested_caption": "Flamenco magic in Seville. The soul of Spain on stage.", + "reasoning": "Strong stage lighting and composition, but foreground arms slightly distract from the performers' emotional moment.", + "latency_ms": 6703, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8f36cc4f-67ee-419a-806a-393e02311846", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "courtyard", + "arches", + "sunlight", + "travel", + "fashion", + "palm trees", + "stone" + ], + "suggested_caption": "Sun-drenched in Seville\u2019s historic courtyard.", + "reasoning": "Strong composition with vibrant colors and clear subject, but slightly busy background reduces IG impact.", + "latency_ms": 6106, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ef806816-857f-4829-9c43-fc7439005b24", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman with curly hair", + "scene_tags": [ + "seville", + "selfie", + "cityscape", + "curly_hair", + "blue_dress", + "overcast", + "ancient_ruins", + "greenery" + ], + "suggested_caption": "City views from my favorite spot.", + "reasoning": "Strong vertical framing with a compelling subject, vibrant blue dress against muted cityscape, and immediate visual hook.", + "latency_ms": 6442, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "98c6d4f2-f935-4358-8db7-5de1da16c638", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza", + "bridge", + "blue dress", + "architecture", + "sunset", + "water", + "travel" + ], + "suggested_caption": "Blue dress, blue sky, blue tiles. Seville\u2019s magic.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, but slightly busy background reduces IG impact.", + "latency_ms": 6046, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "bacbae88-b736-43a5-972d-602d08a3d3a9", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "ivy-covered building", + "scene_tags": [ + "seville", + "ivy", + "architecture", + "blue sky", + "balcony", + "greenery", + "sunset", + "european" + ], + "suggested_caption": "Nature reclaiming the city, one vine at a time.", + "reasoning": "Strong vertical composition with vibrant green against blue sky, but slightly cluttered foreground reduces scroll-stopping impact.", + "latency_ms": 6010, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9499f983-a5ee-416b-ae9c-9df25d846dfc", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "andalusia", + "stone walls", + "palm tree", + "historical site", + "blue dress", + "travel", + "outdoor", + "elegant" + ], + "suggested_caption": "Blue against the ancient stones. \ud83c\uddea\ud83c\uddf8", + "reasoning": "Strong composition with vibrant blue dress contrasting rustic textures, but slightly muted lighting reduces visual pop.", + "latency_ms": 6428, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2f9f26c4-61ba-4578-a3a2-ca62f62556ad", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "palm trees between buildings", + "scene_tags": [ + "palm trees", + "street", + "buildings", + "cloudy", + "spain", + "urban", + "architecture", + "streetview" + ], + "suggested_caption": "Palm trees framing the city streets of Spain.", + "reasoning": "Strong vertical composition with palm trees as focal point, but muted lighting and cluttered foreground reduce visual impact.", + "latency_ms": 6264, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "deb79a4f-f939-4bd4-bf84-16a39ed5f134", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in ornate room", + "scene_tags": [ + "marrakech", + "mosque", + "tiles", + "curly hair", + "blue dress", + "elegant", + "travel", + "architecture" + ], + "suggested_caption": "Lost in the patterns of Marrakech.", + "reasoning": "Strong subject and rich textures score high aesthetically, but framing and lighting lack Instagram\u2019s punchy visual hook.", + "latency_ms": 6390, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a218cf81-a745-4860-b036-dea56c4941f8", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "marrakech", + "mosque", + "tiles", + "columns", + "fashion", + "travel", + "elegant", + "pattern" + ], + "suggested_caption": "Blue dress, Moroccan tiles, and quiet moments.", + "reasoning": "Strong composition with rich textures and warm tones, but slightly off-center framing reduces IG scroll-stopping power.", + "latency_ms": 6243, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90a58b73-2d88-48a4-9fe4-ce70286f84d4", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate library interior", + "scene_tags": [ + "bookshelf", + "fireplace", + "antique", + "elegant", + "books", + "ornaments", + "pink walls", + "classical" + ], + "suggested_caption": "A library steeped in history and quiet grandeur.", + "reasoning": "Rich textures and warm lighting create depth, but the composition feels slightly cluttered for Instagram\u2019s vertical scroll.", + "latency_ms": 6286, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fcaab99b-7200-4f81-8642-eba0c3bc21ec", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "stone tower with flowers", + "scene_tags": [ + "tower", + "flowers", + "greenery", + "stone", + "overcast", + "medieval", + "garden", + "architecture" + ], + "suggested_caption": "Ancient stone meets blooming beauty.", + "reasoning": "Strong vertical composition with natural framing, but muted lighting and lack of vibrant color reduce visual impact.", + "latency_ms": 6162, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 105 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "be8661b0-f545-4afa-94c5-e10da5148041", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "ancient wall", + "palm tree", + "cobblestone", + "blue dress", + "medieval", + "travel", + "portrait", + "outdoor" + ], + "suggested_caption": "Standing in history, dressed in color.", + "reasoning": "Strong subject and color contrast against rustic textures, but slightly cluttered framing reduces scroll-stopping impact.", + "latency_ms": 6226, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f210a4ea-8cf9-47a3-a2b2-dcd99e26e4b7", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "man in blue shirt", + "scene_tags": [ + "yellow wall", + "green plants", + "outdoor", + "tropical", + "sunglasses", + "table", + "portrait", + "casual" + ], + "suggested_caption": "Chillin' in the greenery with a side of sunshine.", + "reasoning": "Strong color contrast and natural lighting make it visually appealing, but the framing feels slightly off-center and lacks a strong Instagram hook.", + "latency_ms": 6393, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4cad0011-b3c6-4612-a398-9a5cae315282", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "night market street", + "scene_tags": [ + "night", + "street", + "crowd", + "lights", + "european", + "festive", + "outdoor", + "urban" + ], + "suggested_caption": "Lost in the vibrant night market vibes \ud83c\udf06", + "reasoning": "Strong vertical composition with dynamic lighting and crowd, but slightly cluttered foreground reduces visual impact.", + "latency_ms": 5978, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "991386b2-325b-496b-a61c-76dadc8ca281", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man at historic balcony", + "scene_tags": [ + "spain", + "balcony", + "architecture", + "palm", + "blue_shirt", + "sunset", + "travel", + "garden" + ], + "suggested_caption": "Standing in the shadow of history, with Spain\u2019s beauty behind me.", + "reasoning": "Strong vertical framing with arch framing, vibrant colors, and clear subject \u2014 perfect for IG scroll stops.", + "latency_ms": 6296, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c98270c9-ee08-4e17-9f2a-2b004a1fa25f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tiled_wall", + "blue_dress", + "curly_hair", + "travel", + "elegant", + "pattern", + "portrait", + "sunset" + ], + "suggested_caption": "Blue dreams against blue tiles.", + "reasoning": "Strong composition with vibrant, harmonious colors and a captivating subject, but slightly less vertical framing for IG scroll stops.", + "latency_ms": 5823, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0aa895b8-729e-46ed-a5cf-eea974827553", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "street architecture", + "scene_tags": [ + "spain", + "buenos_aires", + "blue_sky", + "urban", + "balkons", + "people", + "street", + "colorful" + ], + "suggested_caption": "Colorful facades and bustling streets in the heart of the city.", + "reasoning": "Strong vertical composition with vibrant architecture and sky, but busy street distracts from aesthetic focus.", + "latency_ms": 6380, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 114 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "34258ec5-302b-4df3-a3a5-3ddfa7f4cd56", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 9, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tiled doorway", + "andalusian", + "blue dress", + "travel", + "art", + "doorway", + "elegant", + "mood" + ], + "suggested_caption": "Standing in a doorway of art and history.", + "reasoning": "Vibrant, symmetrical composition with strong color contrast and a striking subject framed by ornate tiles, highly Instagram-worthy.", + "latency_ms": 6127, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d84ea8b1-0ffd-4680-b0dd-fbf2e21c05ea", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple selfie at overlook", + "scene_tags": [ + "seville", + "selfie", + "cityscape", + "cloudy", + "crane", + "trees", + "stone_wall", + "smile" + ], + "suggested_caption": "Our favorite spot in Seville with a view that never gets old.", + "reasoning": "Strong vertical framing with engaging subjects, but slightly cluttered background and muted lighting reduce overall aesthetic appeal.", + "latency_ms": 6282, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "09b42418-79f1-421e-9b7a-906df03ea290", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "cityscape", + "brick wall", + "curly hair", + "blue dress", + "overcast", + "urban", + "greenery", + "elegant" + ], + "suggested_caption": "Blue against the city sky.", + "reasoning": "Strong vertical framing with a confident subject, but muted lighting and slightly cluttered background reduce visual impact.", + "latency_ms": 5868, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b80c556-78b3-473c-aaa9-e771e034918f", + "model": "qwen3vl-8b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman on balcony", + "scene_tags": [ + "spain", + "palace", + "palm trees", + "garden", + "arch", + "sun", + "travel", + "elegant" + ], + "suggested_caption": "Sunset views from the Alhambra balcony.", + "reasoning": "Strong vertical framing with vibrant colors and detailed architecture, but slightly busy background reduces impact.", + "latency_ms": 6201, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9f9c9faf-6bce-4ceb-a1b5-e63179c55990", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man in garden", + "scene_tags": [ + "palace", + "palm trees", + "purple flowers", + "balcony", + "sunlight", + "travel", + "architecture", + "greenery" + ], + "suggested_caption": "sunshine & secrets", + "reasoning": "Strong vertical composition, vibrant colors, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 35883, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fec017d6-54cc-4ee9-89f8-6dd0109e6603", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly-haired woman", + "scene_tags": [ + "denim", + "plants", + "interior", + "sunlight", + "curly hair", + "casual", + "bright", + "indoor" + ], + "suggested_caption": "sunlight + curls = happy.", + "reasoning": "Strong subject and vertical framing, good light and color, but composition is slightly casual.", + "latency_ms": 5620, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 98 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0d53158b-5a17-4ecc-8e92-0195fb6b12a7", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "architectural marvel", + "scene_tags": [ + "seville", + "metropol Parasol", + "sky", + "clouds", + "old town", + "modern", + "sunlight", + "travel" + ], + "suggested_caption": "Seville's skyward statement.", + "reasoning": "Strong vertical composition, vibrant sky, and unique structure make for a visually striking and shareable travel image.", + "latency_ms": 5877, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 102 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "23137c1c-f475-4b9a-8c72-e86c90f8f064", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "smiling man at caf\u00e9", + "scene_tags": [ + "caf\u00e9", + "latte", + "interior", + "relaxed", + "modern", + "light", + "people", + "morning" + ], + "suggested_caption": "a morning pick-me-up and a smile.", + "reasoning": "Good composition and lighting, but the subject's expression is a bit forced, and the vertical framing is slightly off-center.", + "latency_ms": 5998, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3376ee87-8bf5-4710-88e0-f0d89b3587fc", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in azulejo", + "scene_tags": [ + "azulejo", + "portugal", + "blue", + "curly_hair", + "gold_jewelry", + "travel", + "pattern", + "vibrant" + ], + "suggested_caption": "azulejo dreams.", + "reasoning": "Strong subject and vibrant pattern, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5736, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4f2fea45-3119-4df2-bca8-d35a85fd1aa9", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "palace courtyard", + "scene_tags": [ + "seville", + "palm trees", + "yellow walls", + "arches", + "gardens", + "sunlight", + "history", + "tranquility" + ], + "suggested_caption": "hidden gems of seville", + "reasoning": "strong vertical composition, vibrant colors, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 5848, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e49bb267-b7da-4528-a37e-aa92770a0271", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "cityscape", + "cloudy", + "stone wall", + "urban", + "travel", + "casual", + "outdoor", + "summer" + ], + "suggested_caption": "blue against the sky", + "reasoning": "Strong subject and vertical framing, but lighting is flat and background is slightly cluttered.", + "latency_ms": 5583, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2df74bf4-e363-4c43-a0ea-8077666229f6", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "garden", + "roses", + "fountain", + "brick pillars", + "tourists", + "greenery", + "sunlight", + "travel" + ], + "suggested_caption": "blue dress in a sunlit garden", + "reasoning": "Good composition and natural light, but the right side is slightly out of focus, reducing overall aesthetic and IG fit.", + "latency_ms": 5925, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 105 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "750f9142-5e86-468a-89db-e9f28d6aac05", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman by pool", + "scene_tags": [ + "pool", + "brick wall", + "ducks", + "sunlight", + "blue dress", + "moroccan", + "relaxation", + "travel" + ], + "suggested_caption": "sunlit poolside moments.", + "reasoning": "Strong subject and vertical composition, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5235, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ea713729-51b7-4005-834b-bd3064455928", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "architectural exploration", + "scene_tags": [ + "seville", + "plaza", + "buildings", + "evening", + "cafe", + "street", + "travel", + "culture" + ], + "suggested_caption": "Seville's hidden gems.", + "reasoning": "Strong vertical composition, vibrant colors, and a clear subject make this visually appealing and Instagram-friendly.", + "latency_ms": 5279, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b0734c0-589c-451a-a41f-8fc45d757ccc", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tiled archway", + "historical building", + "blue dress", + "indoor", + "ornate", + "travel", + "culture", + "elegant" + ], + "suggested_caption": "blue and gold", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5310, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e6ebf7b0-7f4d-40b3-919e-3986cbd595fe", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "plaza de Espa\u00f1a", + "scene_tags": [ + "seville", + "spanish", + "baroque", + "flag", + "carriage", + "plaza", + "sunshine", + "travel" + ], + "suggested_caption": "plaza de espa\u00f1a, seville", + "reasoning": "strong composition and vibrant colors, but the horse-drawn carriage adds a unique focal point, making it visually engaging for social media.", + "latency_ms": 5807, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ee9d68c9-e20c-45a9-8d69-7fe7cecda6c6", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "architectural marvel", + "scene_tags": [ + "seville", + "santiago calatrava", + "sky", + "urban", + "modern", + "sunlight", + "clouds", + "cafe" + ], + "suggested_caption": "where art meets architecture.", + "reasoning": "Strong vertical composition, vibrant light, and unique subject make it visually striking and Instagram-worthy.", + "latency_ms": 5403, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 98 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "eade13f0-608b-4e5b-a11c-610287226371", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "seville", + "balcony", + "blue dress", + "sunshine", + "architecture", + "river", + "travel" + ], + "suggested_caption": "plaza de Espa\u00f1a vibes \u2728", + "reasoning": "Strong subject, vibrant colors, and iconic architecture make for a visually engaging and Instagram-worthy travel shot.", + "latency_ms": 5587, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "75cfcb0b-fd7b-4c03-a399-f6253e3db200", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "bullring with city view", + "scene_tags": [ + "malaga", + "bullring", + "coast", + "buildings", + "trees", + "path", + "flowers", + "overcast" + ], + "suggested_caption": "Malaga's bullring from above.", + "reasoning": "Strong composition with clear subject, good vertical framing, and a compelling coastal cityscape, but slightly muted light.", + "latency_ms": 6208, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 103 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6d2920c8-08d1-4bef-9abc-bc91c446570f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "fountain", + "arches", + "sunlight", + "plants", + "travel", + "summer", + "casual" + ], + "suggested_caption": "blue and sunshine.", + "reasoning": "Strong subject and vertical framing, but background details slightly distract from the main focus.", + "latency_ms": 5385, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c2769ba4-f2c0-49c1-a4b8-6ce0e083f8ec", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate town hall", + "scene_tags": [ + "beige\u5efa\u7b51", + "\u67f1\u5eca", + "\u897f\u73ed\u7259\u56fd\u65d7", + "\u5929\u7a7a", + "\u505c\u8f66\u573a\u6807\u5fd7", + "\u5386\u53f2\u5efa\u7b51", + "\u57ce\u5e02", + "\u6674\u5929" + ], + "suggested_caption": "Granada's grandeur.", + "reasoning": "Strong vertical composition and clear subject, but some elements (parking sign) distract from pure aesthetics.", + "latency_ms": 6097, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "17905afc-be7f-4664-948a-1c9da287b703", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "columns", + "palm", + "flowers", + "moroccan", + "travel", + "sunlight", + "greenery" + ], + "suggested_caption": "hidden gems.", + "reasoning": "Strong subject and vibrant setting, but slightly cluttered foreground and vertical framing could be tighter.", + "latency_ms": 5570, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "40f82498-2e9c-4b98-8ebb-ed9821c179a0", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "urban architecture", + "scene_tags": [ + "seville", + "buildings", + "sky", + "street", + "bicycles", + "modern", + "historical", + "sunlight" + ], + "suggested_caption": "Seville's blend of old and new.", + "reasoning": "Good composition and light, but lacks a strong visual hook for IG scrolling.", + "latency_ms": 5607, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5a879592-e59b-4a79-8886-dc089e301f5a", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in plaza", + "scene_tags": [ + "seville", + "plaza", + "baroque", + "sunshine", + "travel", + "architecture", + "dress", + "summer" + ], + "suggested_caption": "plaza de Espa\u00f1a vibes", + "reasoning": "Strong vertical composition, vibrant colors, and a clear subject make this visually appealing and Instagram-scroll-stopping.", + "latency_ms": 5774, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "885508f8-f39b-484e-8959-929111ab0b0d", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "river", + "architecture", + "blue dress", + "seville", + "sunshine", + "tourist", + "historic" + ], + "suggested_caption": "plaza de Espa\u00f1a, seville", + "reasoning": "Strong composition and vibrant colors, but the subject placement slightly distracts from the iconic architecture.", + "latency_ms": 5672, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90b60141-efa8-4a34-8e0a-dda28f296f58", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "bougainvillea", + "bench", + "yellow walls", + "travel", + "joy", + "sunlight", + "colorful" + ], + "suggested_caption": "a splash of blue in the courtyard", + "reasoning": "Strong subject and vibrant colors, but composition is slightly casual, missing a tighter frame.", + "latency_ms": 5750, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "876f997c-e9be-40e2-8482-ea0216b82d5a", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "man in blue shirt", + "scene_tags": [ + "bench", + "greenery", + "outdoor", + "relaxed", + "sunny" + ], + "suggested_caption": "a moment of calm.", + "reasoning": "Good lighting and subject clarity, but composition is slightly centered and lacks dynamic visual hook.", + "latency_ms": 5131, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 84 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d37f1824-5d53-41ca-8c79-ffae48978442", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "garden", + "column", + "fountain", + "flowers", + "blue dress", + "yellow walls", + "arabesque", + "sunlight" + ], + "suggested_caption": "enchanted in the courtyard", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5650, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7a13fad2-6ef9-44ea-944c-551e854b6acd", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman on city wall", + "scene_tags": [ + "cityscape", + "blue dress", + "overcast", + "travel", + "historical site", + "smile", + "outdoor", + "urban" + ], + "suggested_caption": "city views from above.", + "reasoning": "Strong subject and vertical framing, but overcast light and busy city background slightly reduce aesthetic and visual impact.", + "latency_ms": 6036, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "64ebfd3c-e9a1-49c2-9d0c-a81182ef6af2", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tile wall", + "blue", + "yellow", + "pattern", + "Portugal", + "Lisbon", + "fashion", + "travel" + ], + "suggested_caption": "Lisbon's tiled charm.", + "reasoning": "Strong subject and vibrant pattern, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5668, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d211ea44-4f3c-44d0-b7f0-cb9d001f07af", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "balcony", + "sunlight", + "greenery", + "travel", + "summer", + "dress", + "outdoor", + "vines" + ], + "suggested_caption": "twirling in the sun", + "reasoning": "Strong subject and vertical framing, but lighting and composition could be more dynamic for portfolio quality.", + "latency_ms": 5819, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "30015fce-9f43-430e-8268-36cb4cb56596", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "curly-haired woman in blue dress", + "scene_tags": [ + "outdoor", + "park", + "sunlight", + "greenery", + "elegant", + "summer", + "portrait", + "joy" + ], + "suggested_caption": "sunlit curls and a blue dress.", + "reasoning": "Strong subject and vertical framing, but background is slightly busy, reducing overall aesthetic and IG fit.", + "latency_ms": 5941, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 101 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9842a059-f560-4243-9710-84a9ef7ee71e", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man at plaza", + "scene_tags": [ + "plaza", + "architecture", + "canals", + "sightseeing", + "seville", + "sunshine", + "travel", + "summer" + ], + "suggested_caption": "plaza de Espa\u00f1a vibes", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5549, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f26f6930-16a5-400f-ab7c-ff19abde8ef3", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "river", + "architecture", + "sunshine", + "travel", + "Spain", + "balcony", + "joy" + ], + "suggested_caption": "Seville's beauty in blue.", + "reasoning": "Strong vertical composition, vibrant colors, and a clear subject make this visually appealing and Instagram-friendly.", + "latency_ms": 5649, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d99cf40e-3bed-47f7-8595-c11286ab3a6a", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "seville", + "baroque", + "sun", + "travel", + "architecture", + "summer", + "tourist" + ], + "suggested_caption": "plaza de Espa\u00f1a vibes", + "reasoning": "Strong vertical composition, vibrant colors, and a clear subject make this visually appealing and Instagram-friendly.", + "latency_ms": 5630, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2e199e4b-3fb5-442f-895e-3ab7ba9ccdaf", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate arabesque ceiling", + "scene_tags": "mosque, arabic script, gold, blue, red, pattern, architecture, intricate", + "suggested_caption": "where history meets artistry.", + "reasoning": "Strong composition and vibrant colors, but slightly busy for quick IG scroll.", + "latency_ms": 5173, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 85 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "13dc549f-8aee-41b4-92b8-954b5bc41fb2", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "stage performance", + "scene_tags": [ + "theater", + "performers", + "flamenco", + "audience", + "lights", + "stage", + "music", + "celebration" + ], + "suggested_caption": "a night at the theater", + "reasoning": "good lighting and vertical framing, but slightly cluttered with performers and audience hands.", + "latency_ms": 5841, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "144aadc1-0e9c-46c7-80dd-8decd901e4ee", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "curly-haired woman with backpack", + "scene_tags": [ + "bougainvillea", + "greenery", + "travel", + "smile", + "casual", + "outdoor", + "colorful" + ], + "suggested_caption": "bougainvillea dreams", + "reasoning": "Strong subject, vibrant colors, and vertical framing make it visually appealing and Instagram-friendly.", + "latency_ms": 5920, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3c464a1a-ab0e-4703-9bcd-37ccb17f8dac", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "street style", + "scene_tags": [ + "city", + "sidewalk", + "trees", + "sunlight", + "backpack", + "denim", + "casual", + "urban" + ], + "suggested_caption": "city vibes.", + "reasoning": "Strong subject and vertical framing, but background is slightly busy, reducing overall aesthetic and IG fit.", + "latency_ms": 5599, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 93 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0f816473-c0f5-44eb-96a1-9c982f7f0343", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "palm trees", + "historic garden", + "sunlight", + "travel", + "summer", + "outdoor", + "elegant", + "tourist" + ], + "suggested_caption": "blue dress, blue sky, blue vibes.", + "reasoning": "Strong subject and vibrant colors, but composition is slightly tilted and lacks dynamic framing for IG scroll-stopping impact.", + "latency_ms": 6054, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 105 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "891f2361-7c42-4163-b37a-c11f7f7126f2", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman on stairs", + "scene_tags": [ + "seville", + "architectural", + "sunlight", + "travel", + "blue dress", + "historic", + "tourist", + "summer" + ], + "suggested_caption": "sunlit seville", + "reasoning": "Strong subject, vertical framing, and vibrant colors make it visually appealing and Instagram-friendly.", + "latency_ms": 5551, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "711f44c3-d2f8-4878-b587-4863e268dd3c", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "bar interior", + "scene_tags": [ + "bar", + "wooden", + "chairs", + "lighting", + "warm", + "cozy", + "restaurant", + "interior" + ], + "suggested_caption": "cozy bar vibes", + "reasoning": "Strong composition and warm lighting, but less vertical emphasis for IG scroll appeal.", + "latency_ms": 5394, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 90 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "baf172dd-da76-4c3c-80b6-99382aeb4a72", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in dress", + "scene_tags": [ + "veranda", + "greenery", + "sunlight", + "dress", + "travel", + "summer", + "outdoor" + ], + "suggested_caption": "dancing in the light", + "reasoning": "Strong subject and vertical composition, but lighting and color balance could be more refined.", + "latency_ms": 5214, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 89 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6a918ad8-de2d-48e9-a378-c7038c9e5178", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress at museum", + "scene_tags": [ + "museum", + "portrait", + "dress", + "art", + "seville", + "historical", + "tourist", + "cultural" + ], + "suggested_caption": "blue dress, red painting, museum vibes.", + "reasoning": "Strong vertical composition, vibrant blue dress contrasts with warm tones, but portrait framing is slightly off-center.", + "latency_ms": 5737, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 103 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4b09475f-0eee-46ba-a558-1f0cd3ecd473", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in historic room", + "scene_tags": [ + "interior", + "antique", + "ornate", + "lighting", + "pattern", + "heritage", + "elegant", + "museum" + ], + "suggested_caption": "timeless elegance", + "reasoning": "Strong composition and rich details, but the subject's pose is slightly casual for maximum impact.", + "latency_ms": 5674, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ff2de652-1f1a-4d5c-a7ee-28166ce7118f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "horse-drawn carriage", + "scene_tags": [ + "street", + "horse", + "carriage", + "city", + "trees", + "sunlight", + "travel", + "urban" + ], + "suggested_caption": "A slice of old-world charm.", + "reasoning": "Strong subject and vertical framing, but less unique composition and lighting than portfolio-worthy.", + "latency_ms": 5659, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "852f15e1-94f2-49db-8205-218c85d0a43f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "plaza de Espa\u00f1a", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "spain", + "sunny", + "historic", + "travel", + "grand" + ], + "suggested_caption": "plaza de espa\u00f1a, seville", + "reasoning": "strong composition and vibrant colors, but lacks a dynamic focal point for IG scroll appeal.", + "latency_ms": 5644, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c869757b-8734-4a8d-8dfb-fad070bf7be1", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "historic castle entrance", + "scene_tags": [ + "castillo", + "spain", + "tourists", + "sunlight", + "architecture", + "travel", + "daylight", + "summer" + ], + "suggested_caption": "Stepping back in time at the castle gates.", + "reasoning": "Strong vertical composition, bright light, clear subject, but some tourists distract from pure aesthetics.", + "latency_ms": 5787, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3ba4c50c-6ec4-41b1-bb2b-e9d4eea108f6", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "lit church facade", + "scene_tags": [ + "night", + "baroque", + "statue", + "trees", + "red building", + "light", + "square", + "history" + ], + "suggested_caption": "night glow on baroque beauty", + "reasoning": "Strong vertical composition, warm lighting, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 5629, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e5fc776e-8467-4805-8c35-77383f62d76d", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "balcony", + "sunlight", + "petals", + "yellow wall", + "pink hair", + "summer", + "travel", + "relaxation" + ], + "suggested_caption": "sunlit daydreams.", + "reasoning": "Strong subject and vertical framing, but lighting and color balance could be more refined for portfolio quality.", + "latency_ms": 5746, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b1a8b354-f9a4-42db-9639-44fd9ecbdd33", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "plaza de Espa\u00f1a", + "scene_tags": "seville, spain, plaza, architecture, people, blue sky, historic, grand", + "suggested_caption": "plaza de espa\u00f1a: where history meets the everyday.", + "reasoning": "Strong composition and vibrant light, but less vertical emphasis for IG scroll appeal.", + "latency_ms": 5444, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 90 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ba6f613c-61cd-42a7-aaa9-374d4f0ac058", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man at plaza", + "scene_tags": [ + "plaza", + "river", + "architecture", + "sightseeing", + "seville", + "sunshine", + "travel", + "blue" + ], + "suggested_caption": "plaza de Espa\u00f1a vibes", + "reasoning": "Strong subject and vertical framing, but slightly cluttered foreground and midground.", + "latency_ms": 5556, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "82391768-2834-4843-9cdd-249bd6780f91", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "fried dumplings", + "scene_tags": [ + "food", + "table", + "restaurant", + "sauce", + "cabbage", + "casual", + "indoor", + "delicious" + ], + "suggested_caption": "crispy dumplings, ready to dive in!", + "reasoning": "Strong subject with good vertical framing, but background is slightly distracting, reducing overall aesthetic.", + "latency_ms": 5811, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "01292c70-996c-43cd-b132-5933d3afbf43", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "bougainvillea", + "bench", + "travel", + "floral", + "arch", + "sunlight", + "relaxation" + ], + "suggested_caption": "a moment of quiet in the garden.", + "reasoning": "Strong vertical composition, vibrant colors, and a clear subject make this visually appealing and engaging for social media.", + "latency_ms": 5861, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 104 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "edb6e566-0350-4861-ae89-e32ddcfd4f14", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "fountain", + "plants", + "historical\u5efa\u7b51", + "sunny", + "travel", + "summer", + "relaxation" + ], + "suggested_caption": "sunlit moments in the garden.", + "reasoning": "Strong subject and vertical composition, but background details slightly distract from the main focus.", + "latency_ms": 5637, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b9c7f1d5-7336-4860-a38a-c3e1d82ee655", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly-haired woman with phone", + "scene_tags": [ + "street", + "sunglasses", + "curly hair", + "casual", + "daylight", + "urban", + "traveler", + "smile" + ], + "suggested_caption": "city vibes.", + "reasoning": "Strong subject and vertical framing, but background is slightly distracting, reducing overall aesthetic and IG fit.", + "latency_ms": 5910, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "967b48e8-531a-4bef-a069-fab60690145f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "pizza kitchen", + "scene_tags": [ + "pizzeria", + "lemons", + "olive_oil", + "artisan", + "italian", + "food", + "warm", + "craftsmanship" + ], + "suggested_caption": "where pizza dreams come to life.", + "reasoning": "Strong composition and warm lighting, but less vertical emphasis for IG scroll appeal.", + "latency_ms": 5617, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b68453c0-f5a3-4e8e-b231-af92fa2ed182", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "indoor", + "tiled floor", + "table", + "ornate wall", + "sunlight", + "casual", + "travel", + "elegant" + ], + "suggested_caption": "blue and gold", + "reasoning": "Strong subject and vertical framing, good light and color, but less dynamic composition.", + "latency_ms": 5769, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7f9762e4-afb1-45f5-85f0-fd33e050ed23", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "man in blue shirt", + "scene_tags": [ + "bench", + "greenery", + "outdoor", + "relaxed", + "sunlight", + "plants", + "casual", + "summer" + ], + "suggested_caption": "greenery backdrop", + "reasoning": "Good lighting and subject clarity, but composition is slightly centered and lacks dynamic visual hook.", + "latency_ms": 5568, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 93 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c61412cb-4abc-4d1c-b541-f1d67adc3b03", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "ruins", + "palm", + "cobblestone", + "ancient", + "travel", + "outdoor", + "historical", + "serene" + ], + "suggested_caption": "blue in the ruins", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5842, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4719aae4-0783-447a-afc2-9f84c7eca3d1", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "tower", + "sun", + "travel", + "summer", + "architecture", + "bridge", + "tourist" + ], + "suggested_caption": "plaza moment", + "reasoning": "Strong vertical composition, vibrant light, clear subject, but slight tilt reduces perfection; IG-friendly with strong visual hook.", + "latency_ms": 5759, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ae8d0f5-432d-40ae-bf24-36aebb8977d0", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "palermo", + "cathedral", + "sunny", + "urban", + "travel", + "casual", + "summer", + "architecture" + ], + "suggested_caption": "blue dress, blue sky, blue vibes.", + "reasoning": "Strong subject and vertical framing, but background architecture slightly distracts from the main focus.", + "latency_ms": 5815, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 98 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f32a27d2-44e9-41fe-acd3-b581825b7d37", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man at plaza", + "scene_tags": [ + "plaza", + "architecture", + "balcony", + "boats", + "solaris", + "spain", + "sunshine", + "travel" + ], + "suggested_caption": "plaza moment", + "reasoning": "Strong composition and vibrant colors, but the subject's pose is casual and not the main focus.", + "latency_ms": 5562, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "309a7b9a-ab2a-44b6-98d7-a026f3f9ad2d", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "balcony", + "palm trees", + "hedge maze", + "fountain", + "sunlight", + "travel", + "greenery", + "architecture" + ], + "suggested_caption": "enchanted garden view", + "reasoning": "Strong composition with natural frame, vibrant colors, and clear subject, but less vertical emphasis.", + "latency_ms": 5656, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 98 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "af98052f-97e1-4c37-a719-55fa6f6a5bab", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "courtyard", + "palm", + "flowers", + "arabesque", + "moroccan", + "travel", + "sunlight", + "serenity" + ], + "suggested_caption": "hidden oasis", + "reasoning": "Strong subject and vibrant setting, but slightly cluttered background reduces portfolio quality.", + "latency_ms": 5416, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "556dce46-6930-40fa-b1ee-6b58f1967aa0", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "staircase", + "mosaic floor", + "historical interior", + "lighting", + "dress", + "travel", + "culture", + "indoor" + ], + "suggested_caption": "blue in blue", + "reasoning": "Strong subject and vertical framing, but lighting and composition leave room for portfolio-worthy polish.", + "latency_ms": 5623, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f6fe897c-9c59-4d5c-8026-f532b131e800", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in courtyard", + "scene_tags": [ + "courtyard", + "palm", + "columns", + "flowers", + "moroccan", + "travel", + "sunlight", + "greenery" + ], + "suggested_caption": "hidden gems.", + "reasoning": "Strong vertical composition and vibrant colors make it visually appealing and Instagram-friendly.", + "latency_ms": 5281, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 88 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d4a4990f-30ac-4378-a20c-0b1083883665", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "bridge", + "sightseeing", + "sunny", + "historical", + "travel", + "summer", + "architecture" + ], + "suggested_caption": "plaza moment", + "reasoning": "Strong subject and vertical framing, but background architecture slightly overpowers the person.", + "latency_ms": 5440, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 90 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e71b31a1-bd05-418b-bfe1-d7dcbc8398ed", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "bougainvillea blooms", + "scene_tags": [ + "bougainvillea", + "white_walls", + "purple_flowers", + "sunshine", + "door", + "sky", + "travel", + "color" + ], + "suggested_caption": "a burst of color against the sky", + "reasoning": "vibrant colors and strong vertical composition make it visually striking and Instagram-friendly.", + "latency_ms": 5826, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 102 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "60d9defc-36a6-439d-81bb-3f446972bf14", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "cityscape from hill", + "scene_tags": [ + "valencia", + "skyline", + "harbor", + "palm_trees", + "cloudy", + "urban", + "hill", + "tourists" + ], + "suggested_caption": "valencia from above", + "reasoning": "good composition and detail, but overcast light reduces vibrancy; vertical framing works, but lacks immediate visual hook.", + "latency_ms": 5899, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 102 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ad632dce-c371-4166-8490-27e60fcea65a", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "stairs", + "orange building", + "sunlight", + "historical", + "tourists", + "balcony", + "plants", + "arch" + ], + "suggested_caption": "sunlit steps, blue dress", + "reasoning": "Strong subject and vertical composition, but background details slightly distract from the main focus.", + "latency_ms": 5469, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "38f26552-7b4e-4488-880d-a90e9f5453e7", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate building facade", + "scene_tags": [ + "barcelona", + "architecture", + "balconies", + "windows", + "sunlight", + "urban", + "historic", + "elegant" + ], + "suggested_caption": "Barcelona's grandeur up close.", + "reasoning": "Strong vertical composition and clear details, but less immediate visual hook than simpler scenes.", + "latency_ms": 5538, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "efaf5b66-243e-462f-9d5e-ea90fee3c61b", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate town hall", + "scene_tags": [ + "beige\u5efa\u7b51", + "\u67f1\u5eca", + "\u897f\u73ed\u7259\u56fd\u65d7", + "\u6674\u5929", + "\u68d5\u6988\u6811", + "\u505c\u8f66\u6807\u5fd7", + "\u5386\u53f2\u5efa\u7b51", + "\u57ce\u5e02" + ], + "suggested_caption": "a glimpse of history in the heart of the city.", + "reasoning": "Strong vertical composition and clear subject, but slight clutter from parking sign reduces IG fit.", + "latency_ms": 5768, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 104 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "067e963d-265e-48f5-a4b4-75da4402043c", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "curly-haired woman in garden", + "scene_tags": [ + "garden", + "flowers", + "sunlight", + "yellow\u5efa\u7b51", + "greenery", + "summer", + "casual", + "outdoor" + ], + "suggested_caption": "sunlit curls and garden vibes", + "reasoning": "Strong subject and vibrant garden, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5439, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 98 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "460b6b6d-ec7c-424b-a899-23c5975039f6", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "smiling woman at fortress", + "scene_tags": [ + "fortress", + "cityscape", + "mountains", + "trees", + "historical", + "travel", + "overcast", + "view" + ], + "suggested_caption": "Views from the top.", + "reasoning": "Strong subject and vertical framing, but slightly cluttered foreground and overcast light.", + "latency_ms": 5367, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a56ee545-2409-49d7-a289-97f2d6f75ca6", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 6, + "instagram_fit_score": 7, + "primary_subject": "couple selfie", + "scene_tags": [ + "skyline", + "cloudy", + "coast", + "urban", + "travel", + "friends", + "outdoor", + "daylight" + ], + "suggested_caption": "together in the city", + "reasoning": "Good vertical framing and clear subjects, but composition is casual and background is slightly distracting.", + "latency_ms": 5312, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ed528a9-109c-4855-b3c3-ab81b404f856", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "fountain", + "sunlight", + "travel", + "summer", + "architecture", + "plants", + "outdoor" + ], + "suggested_caption": "sunlit stroll in the courtyard.", + "reasoning": "Strong subject and vertical framing, but lighting and composition could be more dynamic for portfolio quality.", + "latency_ms": 5297, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8ae46e84-d601-4345-bdb1-f6771f388dc1", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "bougainvillea", + "house", + "balcony", + "portrait", + "travel", + "colorful", + "summer", + "vibrant" + ], + "suggested_caption": "a splash of blue against nature's canvas", + "reasoning": "Strong vertical composition, vibrant colors, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 5692, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 103 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1fb7f2c9-2e63-47a0-b59e-ed32de4d6fd5", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "solar", + "sightseeing", + "sunny", + "historical", + "travel", + "summer", + "architecture" + ], + "suggested_caption": "plaza moment", + "reasoning": "Strong subject, vibrant colors, and iconic architecture make for a visually engaging and well-composed travel shot.", + "latency_ms": 5504, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f9f81d70-0e5e-4e07-933c-6e97e3aa22c7", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "historic plaza building", + "scene_tags": [ + "seville", + "spain", + "architecture", + "plaza", + "sunset", + "cafe", + "people", + "vibrant" + ], + "suggested_caption": "Seville's charm in the evening light.", + "reasoning": "Strong vertical composition and vibrant colors make it visually appealing and Instagram-friendly.", + "latency_ms": 5440, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c63f60bb-2c2a-4ebc-b4e5-bd108a7e5e60", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 6, + "instagram_fit_score": 7, + "primary_subject": "elevator selfie", + "scene_tags": [ + "elevator", + "mirror", + "couple", + "urban", + "metallic", + "casual", + "reflection", + "modern" + ], + "suggested_caption": "elevator mirror magic", + "reasoning": "Good vertical composition and clear subjects, but lighting is flat and lacks unique visual interest.", + "latency_ms": 5251, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9fc4be6d-dc08-457c-9f5a-1606fb96dd97", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "lovers with city view", + "scene_tags": "seville, river, clouds, greenery, selfie, couple, urban, landscape", + "suggested_caption": "together in seville", + "reasoning": "Strong vertical composition, clear subjects, and a compelling cityscape backdrop, but slightly cluttered foreground.", + "latency_ms": 5270, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 89 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1d7f8084-eb2e-41e4-a380-d0983f6807e2", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man overlooking city", + "scene_tags": [ + "cityscape", + "mountain", + "cloudy", + "travel", + "view", + "urban", + "nature", + "tourist" + ], + "suggested_caption": "overlooking the city from above.", + "reasoning": "Strong subject and vertical framing, but overcast light and busy background slightly reduce aesthetic and IG fit.", + "latency_ms": 5507, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f638054c-bad8-4ac1-83c2-1b0f5149fc76", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "flamenco performers", + "scene_tags": [ + "stage", + "guitar", + "suits", + "red ruffles", + "purple light", + "theater", + "sevilla", + "audience" + ], + "suggested_caption": "a standing ovation in seville", + "reasoning": "strong vertical composition, vibrant stage lighting, and clear subject make it visually engaging and suitable for social media.", + "latency_ms": 5642, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 104 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8f36cc4f-67ee-419a-806a-393e02311846", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "courtyard", + "fence", + "palm", + "sunlight", + "greenery", + "historical\u5efa\u7b51", + "summer", + "relaxation" + ], + "suggested_caption": "blue and sunshine.", + "reasoning": "Strong subject and vertical framing, but background details slightly distract from the main focus.", + "latency_ms": 5325, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ef806816-857f-4829-9c43-fc7439005b24", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly-haired woman selfie", + "scene_tags": [ + "cityscape", + "mountain", + "sky", + "blue dress", + "cross necklace", + "travel", + "overcast" + ], + "suggested_caption": "top of the world", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio quality.", + "latency_ms": 5114, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 90 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "98c6d4f2-f935-4358-8db7-5de1da16c638", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman at plaza", + "scene_tags": [ + "plaza", + "river", + "architecture", + "blue dress", + "sunlight", + "spain", + "tourist", + "historic" + ], + "suggested_caption": "plaza moment", + "reasoning": "Strong vertical composition, vibrant colors, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 5195, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 93 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "bacbae88-b736-43a5-972d-602d08a3d3a9", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ivy-covered tower", + "scene_tags": [ + "tower", + "ivy", + "balcony", + "sky", + "sunlight", + "architecture", + "greenery", + "vertical" + ], + "suggested_caption": "ivy dreams", + "reasoning": "Strong vertical composition, vibrant colors, and clear subject make it visually appealing and Instagram-friendly.", + "latency_ms": 5112, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 91 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9499f983-a5ee-416b-ae9c-9df25d846dfc", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "explorer in ruins", + "scene_tags": [ + "ruins", + "blue dress", + "palm", + "travel", + "history", + "outdoor", + "adventure", + "stone" + ], + "suggested_caption": "discovering hidden stories", + "reasoning": "Strong vertical composition, vibrant subject against textured ruins, but slightly overcast light reduces peak aesthetic potential.", + "latency_ms": 5429, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2f9f26c4-61ba-4578-a3a2-ca62f62556ad", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 6, + "instagram_fit_score": 7, + "primary_subject": "palm trees in city", + "scene_tags": [ + "palm trees", + "buildings", + "street", + "overcast", + "urban", + "architecture", + "Spain", + "Barcelona" + ], + "suggested_caption": "palm-lined streets of Barcelona", + "reasoning": "Composition is vertical but slightly tilted, light is flat due to overcast sky, colors are muted, subject clarity is good but not striking.", + "latency_ms": 5777, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 108 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "deb79a4f-f939-4bd4-bf84-16a39ed5f134", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "curious woman in patterned space", + "scene_tags": [ + "mosque", + "tile", + "pattern", + "blue", + "gold", + "intrigue", + "travel", + "cultural" + ], + "suggested_caption": "Lost in the patterns.", + "reasoning": "Strong subject and vertical framing, but lighting is a bit flat, reducing overall aesthetic appeal.", + "latency_ms": 5322, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a218cf81-a745-4860-b036-dea56c4941f8", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "mosque", + "architectural", + "tiled", + "indoor", + "travel", + "culture", + "fashion", + "serene" + ], + "suggested_caption": "exploring the beauty of history.", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5394, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 97 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90a58b73-2d88-48a4-9fe4-ce70286f84d4", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "antique library interior", + "scene_tags": [ + "books", + "antiques", + "ornate", + "pink walls", + "chandeliers", + "statues", + "certificates", + "classic" + ], + "suggested_caption": "a glimpse into a world of old-world charm and literary treasures.", + "reasoning": "The composition is rich with details, but the warm lighting and vertical framing make it visually engaging for social media.", + "latency_ms": 5730, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fcaab99b-7200-4f81-8642-eba0c3bc21ec", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "ancient stone tower", + "scene_tags": [ + "tower", + "flowers", + "sky", + "greenery", + "travel", + "history", + "architecture", + "nature" + ], + "suggested_caption": "hidden tower, blooming secrets.", + "reasoning": "Strong vertical composition and natural framing, but lighting is flat and colors are muted, reducing overall impact.", + "latency_ms": 5366, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 95 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "be8661b0-f545-4afa-94c5-e10da5148041", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "ruins", + "palm tree", + "cobblestone", + "ancient", + "travel", + "outdoor", + "historical", + "summer" + ], + "suggested_caption": "blue in the ruins", + "reasoning": "Strong subject and vertical framing, but slightly cluttered background reduces portfolio-worthy potential.", + "latency_ms": 5471, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 96 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f210a4ea-8cf9-47a3-a2b2-dcd99e26e4b7", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "man in blue shirt", + "scene_tags": [ + "yellow wall", + "ivy", + "large leaves", + "outdoor", + "relaxed", + "sunny", + "patio", + "greenery" + ], + "suggested_caption": "sunshine and serenity.", + "reasoning": "Good lighting and composition, but lacks strong visual hook for IG scrolling.", + "latency_ms": 5221, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4cad0011-b3c6-4612-a398-9a5cae315282", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "night market crowd", + "scene_tags": "sunset, crowd, street, buildings, lights, market, evening, urban", + "suggested_caption": "evening buzz in the square", + "reasoning": "Strong vertical composition, vibrant evening light, clear subject, and Instagram-friendly vertical framing with a lively scene.", + "latency_ms": 5212, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 88 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "991386b2-325b-496b-a61c-76dadc8ca281", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "man at palace", + "scene_tags": [ + "palace", + "balcony", + "palm_tree", + "purple_flowers", + "sunshine", + "travel", + "architecture", + "relaxation" + ], + "suggested_caption": "sunshine & stone", + "reasoning": "Strong subject, vibrant colors, and vertical framing make it visually engaging and suitable for Instagram.", + "latency_ms": 5513, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 99 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c98270c9-ee08-4e17-9f2a-2b004a1fa25f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "mosque", + "mosaic", + "blue", + "gold", + "pattern", + "travel", + "culture", + "elegance" + ], + "suggested_caption": "blue and gold harmony.", + "reasoning": "Strong subject and vibrant pattern, but slightly cluttered background reduces portfolio quality.", + "latency_ms": 5533, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 91 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0aa895b8-729e-46ed-a5cf-eea974827553", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "urban street scene", + "scene_tags": [ + "madrid", + "buildings", + "sky", + "people", + "umbrella", + "architecture", + "street", + "daylight" + ], + "suggested_caption": "Madrid's charm in the rain.", + "reasoning": "Strong vertical composition and vibrant colors make it visually appealing and Instagram-friendly.", + "latency_ms": 5690, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 92 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "34258ec5-302b-4df3-a3a5-3ddfa7f4cd56", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "door", + "mosaic", + "historical", + "travel", + "art", + "Spain", + "colorful", + "pattern" + ], + "suggested_caption": "blue and gold", + "reasoning": "Strong subject and vibrant colors, but slightly cluttered background reduces portfolio quality.", + "latency_ms": 5306, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 89 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d84ea8b1-0ffd-4680-b0dd-fbf2e21c05ea", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "smiling tourists in city", + "scene_tags": "barcelona, old town, architecture, sky, trees, people, selfie, urban", + "suggested_caption": "together in the old town.", + "reasoning": "Strong vertical composition, good lighting, clear subjects, but less artistic than portfolio-worthy.", + "latency_ms": 5117, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 87 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "09b42418-79f1-421e-9b7a-906df03ea290", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "rooftop", + "cityscape", + "trees", + "cloudy", + "urban", + "travel", + "casual", + "summer" + ], + "suggested_caption": "blue dress, city view", + "reasoning": "Strong subject and vertical framing, but lighting is flat and composition is slightly casual.", + "latency_ms": 5298, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 94 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b80c556-78b3-473c-aaa9-e771e034918f", + "model": "minicpm-v-4-5", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "balcony", + "palm trees", + "sunlight", + "historical\u5efa\u7b51", + "greenery", + "travel", + "summer", + "relaxation" + ], + "suggested_caption": "balcony view, sunshine & history", + "reasoning": "Strong subject, good vertical framing, bright colors, and clear details make it visually appealing and Instagram-friendly.", + "latency_ms": 5789, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 538, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9f9c9faf-6bce-4ceb-a1b5-e63179c55990", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man in garden", + "scene_tags": [ + "palmera", + "archway", + "purple flowers", + "sunlit", + "mediterranean", + "historic", + "garden", + "balcony" + ], + "suggested_caption": "Found the perfect spot to pause. \ud83c\udf1e #travel #architecture", + "reasoning": "Strong composition with framing, vibrant colors, and clear subject. Instagram-friendly with immediate visual hook.", + "latency_ms": 26222, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 128 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fec017d6-54cc-4ee9-89f8-6dd0109e6603", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly haired woman", + "scene_tags": [ + "indoor", + "plants", + "curly hair", + "denim jacket" + ], + "suggested_caption": "cozy corner with curls & greenery.", + "reasoning": "Warm tones and natural light create inviting mood; vertical framing works well for IG, but composition is slightly off-center.", + "latency_ms": 3552, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 106 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0d53158b-5a17-4ecc-8e92-0195fb6b12a7", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "modern architecture", + "scene_tags": [ + "seville", + "sunset", + "architecture", + "blue sky", + "urban", + "modern", + "sunset", + "clouds" + ], + "suggested_caption": "Seville\u2019s iconic modern structure against a vibrant blue sky.", + "reasoning": "Strong composition and color contrast make it visually arresting, ideal for IG\u2019s fast-scrolling feed.", + "latency_ms": 3379, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "23137c1c-f475-4b9a-8c72-e86c90f8f064", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man with coffee", + "scene_tags": [ + "coffee shop", + "latte art", + "casual", + "indoor", + "smiling", + "modern", + "relaxed" + ], + "suggested_caption": "Coffee & chill. Perfectly imperfect moment.", + "reasoning": "Warm lighting and candid smile create inviting mood; vertical framing works well for IG, but composition is slightly cluttered.", + "latency_ms": 3449, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3376ee87-8bf5-4710-88e0-f0d89b3587fc", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "portuguese tiles", + "curly hair", + "blue dress", + "cultural backdrop" + ], + "suggested_caption": "Lost in the tiles. \ud83c\udf3f", + "reasoning": "Rich colors and patterned background create visual depth; vertical framing works well for Instagram, with strong subject and immediate visual hook.", + "latency_ms": 3156, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4f2fea45-3119-4df2-bca8-d35a85fd1aa9", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "medieval courtyard", + "scene_tags": [ + "palace", + "palm trees", + "arabesque", + "mediterranean", + "arched walkway", + "ornate fountain", + "sunlit garden" + ], + "suggested_caption": "Timeless beauty in a Spanish courtyard. \ud83c\udf3f", + "reasoning": "Strong composition with warm tones and symmetry, but vertical framing feels slightly off-center for Instagram.", + "latency_ms": 3440, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 125 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e49bb267-b7da-4528-a37e-aa92770a0271", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "urban skyline", + "curly hair", + "stone wall", + "overcast sky" + ], + "suggested_caption": "blue dress against the city. standing tall. #travel #style", + "reasoning": "Strong color contrast and confident pose make it Instagram-friendly, though lighting is flat and composition is slightly unbalanced.", + "latency_ms": 3208, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2df74bf4-e363-4c43-a0ea-8077666229f6", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "mediterranean garden", + "stone fountain", + "curved hedges", + "red flowers", + "tourists", + "arched walkway", + "sunlit courtyard" + ], + "suggested_caption": "A quiet moment in a sun-drenched garden. \ud83c\udf3f", + "reasoning": "Good color contrast and composition, but slightly overexposed sky reduces visual punch. Strong vertical framing and subject make it scroll-stopping.", + "latency_ms": 3734, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 136 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "750f9142-5e86-468a-89db-e9f28d6aac05", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman by pool", + "scene_tags": [ + "mediterranean", + "duck", + "tile pool", + "sunlit", + "curly hair", + "blue dress", + "old wall" + ], + "suggested_caption": "Sun-drenched poolside moment with ducks and history.", + "reasoning": "Strong color harmony and composition, but vertical framing feels slightly off-balance for IG.", + "latency_ms": 3149, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ea713729-51b7-4005-834b-bd3064455928", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman walking past buildings", + "scene_tags": [ + "barcelona", + "catalan architecture", + "street cafe", + "urban walk", + "purple pants", + "sunset light", + "european city" + ], + "suggested_caption": "Walking through Barcelona\u2019s colorful streets, backlit by golden hour.", + "reasoning": "Strong architectural contrast and color harmony, but composition feels slightly off-center for IG scroll engagement.", + "latency_ms": 3377, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b0734c0-589c-451a-a41f-8fc45d757ccc", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "tile art", + "portuguese architecture", + "blue dress", + "doorway", + "curious gaze", + "cultural heritage" + ], + "suggested_caption": "Lost in the tiles. \ud83c\udf3f", + "reasoning": "Rich colors and ornate tiles create visual depth; vertical framing works well for IG, with strong subject and immediate hook.", + "latency_ms": 3560, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e6ebf7b0-7f4d-40b3-919e-3986cbd595fe", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "grand plaza building", + "scene_tags": [ + "spain", + "plaza", + "architecture", + "sunlight", + "carriage", + "historic", + "blue sky", + "spanish flag" + ], + "suggested_caption": "Grand architecture meets sunny streets. Madrid\u2019s Plaza de Espa\u00f1a in all its glory.", + "reasoning": "Strong composition and color contrast, but vertical framing feels slightly off-center for IG scroll engagement.", + "latency_ms": 3665, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 125 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ee9d68c9-e20c-45a9-8d69-7fe7cecda6c6", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "modern architecture", + "scene_tags": [ + "seville", + "sunset", + "architecture", + "urban", + "blue sky", + "shadows", + "cultural" + ], + "suggested_caption": "Architecture that bends the rules. Seville\u2019s iconic structure under a perfect sky.", + "reasoning": "Strong composition and color contrast make it visually arresting, ideal for IG\u2019s scroll-driven feed.", + "latency_ms": 3603, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 118 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "eade13f0-608b-4e5b-a11c-610287226371", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza de espana", + "blue tile", + "sunlit", + "curly hair", + "travel", + "architecture", + "smiling" + ], + "suggested_caption": "Seville\u2019s magic captured in a blue dress & sunlit smiles. \ud83c\udf1e", + "reasoning": "Strong composition with vibrant colors and iconic backdrop; vertical framing works well for IG, instantly recognizable travel moment.", + "latency_ms": 3737, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 134 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "75cfcb0b-fd7b-4c03-a399-f6253e3db200", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "bullring overlook", + "scene_tags": [ + "bullring", + "coastal city", + "urban landscape", + "tree branches", + "pathway", + "sea view", + "spanish architecture", + "overlook" + ], + "suggested_caption": "From the hilltop, the bullring meets the sea. #travel #spain", + "reasoning": "Good composition with natural framing, but muted lighting reduces visual punch. Strong Instagram hook via unique perspective and scenic sweep.", + "latency_ms": 3742, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 136 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6d2920c8-08d1-4bef-9abc-bc91c446570f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in dress", + "scene_tags": [ + "patio", + "archway", + "greenery", + "fountain", + "curly hair", + "blue dress", + "sunlit" + ], + "suggested_caption": "Sun-drenched courtyard vibes. \ud83c\udf1e", + "reasoning": "Strong subject and framing, but lighting contrast and composition could be sharper for portfolio quality.", + "latency_ms": 3147, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c2769ba4-f2c0-49c1-a4b8-6ce0e083f8ec", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "grand building", + "scene_tags": [ + "architecture", + "palma", + "cultural", + "sunlit", + "steps", + "flags", + "palm trees" + ], + "suggested_caption": "Grand architecture under a bright sky. Perfect for a Mediterranean city stroll.", + "reasoning": "Strong composition with warm tones and clear subject, but vertical framing feels slightly off-center for IG.", + "latency_ms": 3305, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 117 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "17905afc-be7f-4664-948a-1c9da287b703", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "mediterranean", + "courtyard", + "palms", + "flowers", + "arches", + "tradition", + "travel", + "elegant" + ], + "suggested_caption": "Lost in the gardens of Andalusia. \ud83c\udf3f", + "reasoning": "Strong composition with warm tones and cultural context; vertical framing works well for IG, with clear subject and visual hook.", + "latency_ms": 3387, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 127 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "40f82498-2e9c-4b98-8ebb-ed9821c179a0", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "urban street scene", + "scene_tags": [ + "cityscape", + "architecture", + "blue sky", + "street view", + "modern buildings", + "purple tree", + "red car" + ], + "suggested_caption": "City meets sky. Architecture in motion.", + "reasoning": "Good color contrast and composition, but lacks instant visual hook for IG. Urban subject is clear but not eye-catching enough to stop scrolls.", + "latency_ms": 3531, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 121 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5a879592-e59b-4a79-8886-dc089e301f5a", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in dress", + "scene_tags": [ + "seville", + "plaza de espana", + "blue dress", + "sunlit", + "architecture", + "bridge", + "ceramic railings" + ], + "suggested_caption": "Seville\u2019s magic captured in a blue dress & sunlit arches.", + "reasoning": "Strong composition with vibrant colors and iconic backdrop; vertical framing works well for IG, instantly engaging viewer.", + "latency_ms": 3560, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 125 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "885508f8-f39b-484e-8959-929111ab0b0d", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza de espana", + "architecture", + "sunlit", + "river", + "tourist spot", + "ceramic railings", + "blue dress" + ], + "suggested_caption": "Seville\u2019s magic captured in a blue dress & sunlit plaza.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, perfect for IG\u2019s visual-first scroll. The woman adds personal connection and immediate visual hook.", + "latency_ms": 3715, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 138 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90b60141-efa8-4a34-8e0a-dda28f296f58", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "vintage courtyard", + "pink bougainvillea", + "white wrought iron", + "mediterranean style" + ], + "suggested_caption": "whispers of the courtyard, captured in blue and bloom.", + "reasoning": "Balanced composition with vibrant color contrast, strong visual hook for IG scroll, slightly soft focus adds charm.", + "latency_ms": 3064, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 113 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "876f997c-e9be-40e2-8482-ea0216b82d5a", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man on bench", + "scene_tags": [ + "greenery", + "bench", + "outdoor", + "relaxed", + "blue shirt", + "natural light", + "garden", + "casual" + ], + "suggested_caption": "quiet moment in the garden.", + "reasoning": "Good color harmony and natural light, but composition is slightly flat; Instagram-friendly due to clear subject and vertical framing.", + "latency_ms": 3282, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d37f1824-5d53-41ca-8c79-ffae48978442", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "mediterranean", + "courtyard", + "flowers", + "arched columns" + ], + "suggested_caption": "Lost in the garden's quiet magic.", + "reasoning": "Warm tones and natural light create a serene mood; vertical framing draws eyes to the subject instantly.", + "latency_ms": 2836, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 100 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7a13fad2-6ef9-44ea-944c-551e854b6acd", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "cityscape", + "curly hair", + "blue dress", + "stone wall", + "overcast sky" + ], + "suggested_caption": "blue dress against the city. where the sky meets the streets.", + "reasoning": "Strong color contrast and vertical framing make it Instagram-friendly, though lighting is flat and composition is slightly unbalanced.", + "latency_ms": 3271, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "64ebfd3c-e9a1-49c2-9d0c-a81182ef6af2", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "portuguese tiles", + "blue dress", + "curly hair", + "mediterranean vibe" + ], + "suggested_caption": "Lost in the tiles. \ud83c\udf1e #travel #portugal", + "reasoning": "Rich colors and patterned background create visual interest; vertical framing works well for Instagram, with strong subject and immediate hook.", + "latency_ms": 3103, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d211ea44-4f3c-44d0-b7f0-cb9d001f07af", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in dress", + "scene_tags": [ + "green garden", + "sunlight rays", + "curly hair", + "flowing dress" + ], + "suggested_caption": "dancing in the light, green garden vibes", + "reasoning": "aesthetic score reflects warm tones and motion, instagram fit score is high due to vertical framing and visual hook.", + "latency_ms": 2957, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 107 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "30015fce-9f43-430e-8268-36cb4cb56596", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "garden", + "curly hair", + "sunset", + "elegant", + "outdoor", + "portrait", + "summer" + ], + "suggested_caption": "Sun-kissed moment in the garden. \ud83c\udf3f", + "reasoning": "Strong composition and warm tones make it visually appealing, with a clear hook for Instagram viewers.", + "latency_ms": 3149, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 117 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9842a059-f560-4243-9710-84a9ef7ee71e", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man at plaza", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "sunlight", + "tourist", + "bridge", + "tiles" + ], + "suggested_caption": "Seville\u2019s magic. Sun, tiles, and a little wanderlust.", + "reasoning": "Strong composition with vibrant colors and iconic architecture, perfect for IG\u2019s visual-first feed. Man\u2019s pose adds personality and immediacy.", + "latency_ms": 3358, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 125 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f26f6930-16a5-400f-ab7c-ff19abde8ef3", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza de espana", + "blue dress", + "sunlit", + "architecture", + "canal", + "travel" + ], + "suggested_caption": "Seville\u2019s magic captured in a blue dress & sunshine.", + "reasoning": "Strong color harmony and composition, with a clear visual hook for Instagram scrolling.", + "latency_ms": 3158, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d99cf40e-3bed-47f7-8595-c11286ab3a6a", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza", + "sunlit", + "architectural", + "curly hair", + "bridge", + "cultural" + ], + "suggested_caption": "Sun-drenched Seville. History in the frame. \ud83c\udf1e", + "reasoning": "Strong composition with vibrant colors and a compelling human element, ideal for IG scroll-stopping.", + "latency_ms": 3359, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 122 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2e199e4b-3fb5-442f-895e-3ab7ba9ccdaf", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "intricate arabic architecture", + "scene_tags": [ + "mosque", + "mosaic", + "arabesque", + "ornate", + "mediterranean", + "historical", + "ceiling", + "arch" + ], + "suggested_caption": "Where art meets history. Intricate arabesque patterns in a historic Moroccan mosque.", + "reasoning": "High detail and rich color make it visually striking, but vertical framing lacks immediate visual hook for IG.", + "latency_ms": 3596, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 133 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "13dc549f-8aee-41b4-92b8-954b5bc41fb2", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "flamenco performance", + "scene_tags": [ + "flamenco", + "theater", + "stage", + "performance", + "seville", + "guitar", + "dancers", + "purple lighting" + ], + "suggested_caption": "Live flamenco magic at Teatro Flamenco Sevilla. Pure energy on stage.", + "reasoning": "Stage lighting and composition are strong, but color saturation is slightly overdone. Perfect for IG scroll stopper with clear subject and vertical framing.", + "latency_ms": 3763, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 136 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "144aadc1-0e9c-46c7-80dd-8decd901e4ee", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman with flowers", + "scene_tags": [ + "bougainvillea", + "curly hair", + "denim jacket", + "green bag", + "smiling woman", + "lush greenery", + "vibrant blooms", + "sandy path" + ], + "suggested_caption": "Lost in the bloom. \ud83c\udf3a", + "reasoning": "Strong color contrast and natural light make it visually arresting; vertical framing works well for Instagram scrolling.", + "latency_ms": 3562, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3c464a1a-ab0e-4703-9bcd-37ccb17f8dac", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly woman street style", + "scene_tags": [ + "urban street", + "curly hair", + "denim jacket", + "green bag", + "sunglasses", + "sunlit sidewalk" + ], + "suggested_caption": "Street style with attitude. Curly hair, denim, and green vibes.", + "reasoning": "Strong subject and color contrast make it Instagram-friendly, but composition is slightly flat.", + "latency_ms": 3389, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0f816473-c0f5-44eb-96a1-9c982f7f0343", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "palmera", + "alhambra", + "sunset", + "mediterranean", + "garden", + "luxury", + "travel", + "elegant" + ], + "suggested_caption": "Blue dress, palm trees, and a palace. Perfect day in Seville.", + "reasoning": "Strong color contrast and composition, with vertical framing ideal for Instagram. Subject is clear and visually engaging.", + "latency_ms": 4338, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 132 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "891f2361-7c42-4163-b37a-c11f7f7126f2", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza de espana", + "tiled stairs", + "sunset", + "elegant", + "travel", + "architecture", + "sunglasses" + ], + "suggested_caption": "Seville\u2019s magic in a blue dress. \ud83c\udf1e #plazadesevila", + "reasoning": "Strong color harmony and architectural detail elevate aesthetic score; vertical framing and subject hook make it Instagram-ready.", + "latency_ms": 4635, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 136 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "711f44c3-d2f8-4878-b587-4863e268dd3c", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "cozy bar interior", + "scene_tags": [ + "bar", + "wooden counter", + "chairs", + "warm lighting", + "european cafe", + "barista", + "wine rack", + "old photos" + ], + "suggested_caption": "Cozy bar with vintage charm. Perfect for a quiet evening.", + "reasoning": "Warm tones and inviting layout score 7/10 for aesthetics, 8/10 for IG fit due to strong visual hook and vertical framing.", + "latency_ms": 4473, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 138 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "baf172dd-da76-4c3c-80b6-99382aeb4a72", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "vine-covered", + "sunlit path", + "mediterranean", + "archway", + "flowing dress", + "greenery", + "cobbled walkway", + "woman posing" + ], + "suggested_caption": "Dancing through the vines. Where light meets green.", + "reasoning": "Strong composition with dappled light and flowing dress, but vertical framing feels slightly off for IG. Aesthetic is high, but Instagram engagement is moderate due to framing.", + "latency_ms": 4112, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 142 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "6a918ad8-de2d-48e9-a378-c7038c9e5178", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "art gallery", + "bullfighter portrait", + "blue dress", + "curly hair" + ], + "suggested_caption": "Lost in art. Blue dress. Bullfighter. Quiet magic.", + "reasoning": "Strong color contrast and composition, but lighting is flat; Instagram-friendly due to vertical framing and visual interest.", + "latency_ms": 3283, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 109 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4b09475f-0eee-46ba-a558-1f0cd3ecd473", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in ornate room", + "scene_tags": [ + "mediterranean", + "tile floor", + "wood beams", + "historical interior" + ], + "suggested_caption": "Lost in timeless elegance. \ud83c\udf3f", + "reasoning": "Rich textures and warm tones create depth, but vertical framing feels slightly off-center for IG scroll engagement.", + "latency_ms": 2981, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 105 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ff2de652-1f1a-4d5c-a7ee-28166ce7118f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "horse carriage", + "scene_tags": [ + "street", + "horse", + "carriage", + "trees", + "european", + "sunset", + "cobbled", + "old" + ], + "suggested_caption": "Vintage charm on cobblestone streets. \ud83d\udc0e", + "reasoning": "Strong composition with contrast between vintage carriage and modern car, good color harmony, but Instagram fit slightly compromised by background clutter.", + "latency_ms": 3397, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "852f15e1-94f2-49db-8205-218c85d0a43f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "grand plaza building", + "scene_tags": [ + "spain", + "plaza", + "architecture", + "sunlit", + "historic", + "blue sky", + "flag" + ], + "suggested_caption": "Sun-drenched grandeur. A Spanish plaza in all its ornate glory.", + "reasoning": "Strong architectural detail and bright light make it visually striking, but composition is slightly wide for vertical feed.", + "latency_ms": 3283, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 120 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c869757b-8734-4a8d-8dfb-fad070bf7be1", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in front of historic gate", + "scene_tags": [ + "andalucia", + "historic gate", + "sunlit courtyard", + "tourist spot", + "medieval architecture", + "blue sky", + "green hedges" + ], + "suggested_caption": "Walking through history under a bright sky. #Andalusia", + "reasoning": "Strong composition with clear subject and vibrant light, but slightly cluttered with people. Instagram-friendly framing and visual hook.", + "latency_ms": 3654, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 131 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "3ba4c50c-6ec4-41b1-bb2b-e9d4eea108f6", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "night church", + "scene_tags": [ + "night", + "church", + "statue", + "urban", + "illuminated", + "square", + "european", + "architecture" + ], + "suggested_caption": "Night lights on a grand church. Quiet, majestic, and full of stories.", + "reasoning": "Strong architectural subject with dramatic lighting, but composition is slightly off-center; works well vertically for IG.", + "latency_ms": 3361, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e5fc776e-8467-4805-8c35-77383f62d76d", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in dress", + "scene_tags": [ + "sunlight", + "patio", + "green walls", + "long dress" + ], + "suggested_caption": "dressed in sunlit grace.", + "reasoning": "Warm tones and patterned dress create visual interest, but color saturation is slightly overdone. Vertical framing works well for Instagram, with strong subject and immediate visual hook.", + "latency_ms": 3168, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 112 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b1a8b354-f9a4-42db-9639-44fd9ecbdd33", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "grand plaza architecture", + "scene_tags": [ + "plaza", + "architecture", + "sunlight", + "spanish", + "tourist", + "bridge", + "carriage" + ], + "suggested_caption": "Sun-drenched grandeur. A day at the Plaza de Espa\u00f1a.", + "reasoning": "Strong symmetry and vibrant sky elevate aesthetics, but vertical framing lacks immediate visual hook for IG.", + "latency_ms": 3285, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 117 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ba6f613c-61cd-42a7-aaa9-374d4f0ac058", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man on bridge", + "scene_tags": [ + "seville", + "plaza de espana", + "tilework", + "sunlit", + "architecture", + "travel", + "bridge", + "blue sky" + ], + "suggested_caption": "Sun-drenched Seville. Where history meets the present. \ud83c\udf1e", + "reasoning": "Strong composition with vibrant colors and clear subject, ideal for IG scroll-stopping. Aesthetic is polished but not overdone.", + "latency_ms": 3821, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 133 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "82391768-2834-4843-9cdd-249bd6780f91", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "fried dumplings", + "scene_tags": [ + "restaurant", + "wood table", + "food", + "close-up", + "dumplings", + "sauce", + "cabbage" + ], + "suggested_caption": "crispy dumplings with a tangy twist. perfect bite.", + "reasoning": "Good color and composition, but shallow depth of field reduces visual impact. Strong IG hook with food subject and vertical framing.", + "latency_ms": 3845, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 124 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "01292c70-996c-43cd-b132-5933d3afbf43", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "andalucia", + "flower arch", + "white courtyard", + "boho style", + "cultural architecture", + "spring blooms", + "travel photography", + "mediterranean" + ], + "suggested_caption": "Lost in the bloom of Andalusia. \ud83c\udf39 #travel #boho", + "reasoning": "Strong color contrast and vertical framing make it Instagram-friendly; aesthetic is polished but not overdone.", + "latency_ms": 3762, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 134 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "edb6e566-0350-4861-ae89-e32ddcfd4f14", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "courtyard", + "mediterranean", + "sunlit", + "vintage", + "planters", + "fountain", + "archways" + ], + "suggested_caption": "Lost in the garden's quiet magic.", + "reasoning": "Strong composition with warm light and rich colors, vertical framing works well for IG, subject is instantly engaging.", + "latency_ms": 3343, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 117 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b9c7f1d5-7336-4860-a38a-c3e1d82ee655", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "curly woman", + "scene_tags": [ + "street", + "sunglasses", + "curly hair", + "urban", + "smiling", + "phone", + "green bag" + ], + "suggested_caption": "Curly hair, sunglasses, and a smile. Street style, captured.", + "reasoning": "Strong subject and vertical framing with natural light, but background distraction slightly lowers aesthetic score.", + "latency_ms": 3650, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 118 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "967b48e8-531a-4bef-a069-fab60690145f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "pizza kitchen", + "scene_tags": [ + "pizza", + "italian", + "cooking", + "lemon", + "bakery", + "oven", + "food", + "warm" + ], + "suggested_caption": "Freshly baked pizza in a cozy, lemon-scented pizzeria. \ud83c\udf55", + "reasoning": "Good color harmony and composition, but slightly cluttered. Instagram-friendly with strong visual hook and vertical framing.", + "latency_ms": 3598, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 128 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "b68453c0-f5a3-4e8e-b231-af92fa2ed182", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "mediterranean", + "tile walls", + "terrace", + "curly hair", + "boho style", + "golden accessories", + "sunlit" + ], + "suggested_caption": "Blue dress, golden details, and a quiet moment in a sunlit courtyard.", + "reasoning": "Strong color harmony and composition, with vertical framing ideal for Instagram. The subject is instantly recognizable and visually engaging.", + "latency_ms": 3554, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 129 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7f9762e4-afb1-45f5-85f0-fd33e050ed23", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man on bench", + "scene_tags": [ + "greenery", + "outdoor", + "bench", + "garden", + "blue shirt", + "relaxed", + "natural light" + ], + "suggested_caption": "quiet moment in the garden", + "reasoning": "balanced composition with natural light, but muted colors limit portfolio appeal; strong visual hook for IG due to expressive pose and green backdrop.", + "latency_ms": 3329, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 118 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c61412cb-4abc-4d1c-b541-f1d67adc3b03", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "medieval wall", + "palm tree", + "cobblestone path", + "blue dress", + "archway", + "curly hair", + "sunlit" + ], + "suggested_caption": "blue dress against ancient stones. quiet, bold, timeless.", + "reasoning": "Strong color contrast and composition make it visually arresting; vertical framing works well for Instagram.", + "latency_ms": 3786, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 122 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4719aae4-0783-447a-afc2-9f84c7eca3d1", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman viewing plaza", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "sunlight", + "curly hair", + "travel", + "european", + "blue sky" + ], + "suggested_caption": "Lost in the grandeur of Seville's Plaza de Espa\u00f1a.", + "reasoning": "Strong composition with vibrant colors and a clear focal point, ideal for Instagram\u2019s vertical scroll. The subject\u2019s back view creates a personal, immersive feel.", + "latency_ms": 3867, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 134 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ae8d0f5-432d-40ae-bf24-36aebb8977d0", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "cathedral", + "sunset", + "street", + "travel", + "europe", + "architecture", + "urban" + ], + "suggested_caption": "Seville cathedral & me in blue. \ud83c\udf1e #travel #seville", + "reasoning": "Strong color contrast and composition draw attention; vertical framing works well for IG, with clear subject and visual hook.", + "latency_ms": 3614, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 129 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f32a27d2-44e9-41fe-acd3-b581825b7d37", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man in plaza", + "scene_tags": [ + "seville", + "plaza", + "architecture", + "sunlight", + "tourist", + "blue tiles", + "canal" + ], + "suggested_caption": "Sun-drenched Seville. Where history meets the present. \ud83c\udf1e", + "reasoning": "Strong composition with vibrant colors and iconic architecture, perfect for IG\u2019s visual-first feed. Man\u2019s pose adds human interest and scale.", + "latency_ms": 3415, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 128 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "309a7b9a-ab2a-44b6-98d7-a026f3f9ad2d", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "palmera", + "mediterranean", + "archway", + "garden", + "luxury", + "sunlit", + "elegant", + "tourist" + ], + "suggested_caption": "Lost in the gardens. \ud83c\udf3f", + "reasoning": "Strong framing through archway, vibrant colors, and model's pose create visual interest and aesthetic appeal, ideal for IG scroll-stopping.", + "latency_ms": 3845, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "af98052f-97e1-4c37-a719-55fa6f6a5bab", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "mediterranean", + "courtyard", + "palmtree", + "floral", + "arched", + "travel", + "photography", + "colorful" + ], + "suggested_caption": "Lost in the gardens of a historic courtyard.", + "reasoning": "Strong color harmony and composition, with a clear visual hook for Instagram scrolling.", + "latency_ms": 3356, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "556dce46-6930-40fa-b1ee-6b58f1967aa0", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "ornate interior", + "mosaic floor", + "staircase", + "luxury villa", + "curved staircase", + "blue dress", + "historical architecture", + "woman posing" + ], + "suggested_caption": "Blue dress in a palace of patterns. Where elegance meets history.", + "reasoning": "Strong color harmony and architectural detail elevate aesthetic score; vertical framing and subject hook make it Instagram-ready.", + "latency_ms": 3559, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 132 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f6fe897c-9c59-4d5c-8026-f532b131e800", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "woman in garden", + "scene_tags": [ + "alhambra", + "courtyard", + "palms", + "mediterranean", + "flowerbeds", + "archways", + "travel", + "elegant" + ], + "suggested_caption": "Lost in the gardens of a historic courtyard. \ud83c\udf3f", + "reasoning": "Strong composition with warm tones and cultural context, but slightly cluttered framing reduces instant visual hook.", + "latency_ms": 3456, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 127 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d4a4990f-30ac-4378-a20c-0b1083883665", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman at plaza", + "scene_tags": [ + "seville", + "plaza", + "sunlit", + "architecture", + "tourist", + "sunset", + "cultural", + "elegant" + ], + "suggested_caption": "Sun-drenched moments in Seville's grand plaza.", + "reasoning": "Strong composition with vibrant colors and a clear subject, ideal for IG scroll-stopping.", + "latency_ms": 3455, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "e71b31a1-bd05-418b-bfe1-d7dcbc8398ed", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "flower-covered doorway", + "scene_tags": [ + "flowering vines", + "sunset colors", + "mediterranean architecture", + "vibrant blooms", + "purple flowers", + "white walls", + "open doorway", + "blue sky" + ], + "suggested_caption": "Colorful blooms frame a quiet doorway. Perfect for a slow scroll.", + "reasoning": "High color contrast and vertical framing make it Instagram-ready, with strong visual impact from the flowers and sky.", + "latency_ms": 3744, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 133 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "60d9defc-36a6-439d-81bb-3f446972bf14", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "cityscape view", + "scene_tags": [ + "urban", + "coastal", + "overcast", + "gardens", + "port", + "architecture", + "hills", + "people" + ], + "suggested_caption": "From the hilltop, the city meets the sea under a cloudy sky.", + "reasoning": "Balanced composition with muted tones; Instagram fit is decent but lacks immediate visual punch.", + "latency_ms": 3427, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 121 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ad632dce-c371-4166-8490-27e60fcea65a", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "andalucia", + "historic building", + "staircase", + "curly hair", + "sunlit", + "travel", + "architecture", + "blue dress" + ], + "suggested_caption": "Lost in the sunlit steps of a historic Andalusian courtyard.", + "reasoning": "Strong color contrast and composition draw attention; vertical framing works well for Instagram, with a compelling subject and setting.", + "latency_ms": 3703, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "38f26552-7b4e-4488-880d-a90e9f5453e7", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "ornate building facade", + "scene_tags": [ + "european architecture", + "sunlit street", + "balcony details", + "historic building", + "blue sky", + "urban elegance", + "arched windows" + ], + "suggested_caption": "Architecture that whispers stories. \ud83c\udfdb\ufe0f", + "reasoning": "Strong composition and color contrast, but vertical framing feels slightly off-center for IG scroll engagement.", + "latency_ms": 3703, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 121 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "efaf5b66-243e-462f-9d5e-ea90fee3c61b", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "grand building", + "scene_tags": [ + "architecture", + "city", + "spanish", + "sunlit", + "columns", + "clocktower", + "boulevard" + ], + "suggested_caption": "Grand architecture under a bright sky. History meets modern streets.", + "reasoning": "Strong composition with symmetry and color contrast, but framing leans slightly too wide for vertical IG feed.", + "latency_ms": 3423, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "067e963d-265e-48f5-a4b4-75da4402043c", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "garden", + "curly hair", + "blue dress", + "sunlit", + "mediterranean", + "back view", + "flowers" + ], + "suggested_caption": "sunlit garden, curly hair, and a smile that says 'hello'.", + "reasoning": "Warm tones and natural light create a soft, inviting aesthetic; vertical framing and expressive pose make it instantly engaging on Instagram.", + "latency_ms": 3685, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 128 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "460b6b6d-ec7c-424b-a899-23c5975039f6", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman at castle", + "scene_tags": [ + "mediterranean", + "castle", + "curly hair", + "cityscape" + ], + "suggested_caption": "blue dress, stone walls, and a city view. perfect day.", + "reasoning": "Good color contrast and composition, but overcast lighting reduces vibrancy. Instagram-friendly framing with strong subject and scenic backdrop.", + "latency_ms": 3245, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a56ee545-2409-49d7-a289-97f2d6f75ca6", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple selfie", + "scene_tags": [ + "cityscape", + "overcast", + "travel", + "couple", + "selfie", + "coastal", + "urban" + ], + "suggested_caption": "captured the moment, the view, the vibe.", + "reasoning": "natural lighting and candid expressions create warmth, while the urban backdrop adds context \u2014 ideal for IG\u2019s scroll-friendly vertical format.", + "latency_ms": 3434, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 121 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "5ed528a9-109c-4855-b3c3-ab81b404f856", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in dress", + "scene_tags": [ + "park", + "archway", + "sunlight", + "garden", + "mediterranean", + "cultural", + "travel", + "fashion" + ], + "suggested_caption": "Sun-drenched garden vibes. Where style meets serenity.", + "reasoning": "Strong composition with warm tones and natural light, ideal for IG scroll-stopping. Subject is clear and framed vertically.", + "latency_ms": 3808, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 126 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8ae46e84-d601-4345-bdb1-f6771f388dc1", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "flower-covered house", + "purple bougainvillea", + "blue dress", + "vintage photo", + "sunlit courtyard", + "travel photography", + "colorful architecture" + ], + "suggested_caption": "Lost in the bloom. \ud83c\udf38 #travel #photography", + "reasoning": "Strong color contrast and composition, vertical framing works well for IG, subject is instantly recognizable and visually engaging.", + "latency_ms": 3836, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1fb7f2c9-2e63-47a0-b59e-ed32de4d6fd5", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in dress", + "scene_tags": [ + "seville", + "plaza", + "sunlight", + "architecture", + "travel", + "sunset", + "elegant", + "cultural" + ], + "suggested_caption": "Seville\u2019s magic captured in a dress and a smile. \ud83c\udf1e", + "reasoning": "Bright, balanced composition with strong color contrast; vertical framing works well for IG, instantly recognizable landmark and subject.", + "latency_ms": 3714, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 128 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f9f81d70-0e5e-4e07-933c-6e97e3aa22c7", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 7, + "primary_subject": "colorful street architecture", + "scene_tags": [ + "seville", + "catalan architecture", + "sunlit street", + "cafes", + "tourist spot", + "blue sky", + "historic buildings" + ], + "suggested_caption": "Architecture that tells a story. Seville\u2019s hidden gem.", + "reasoning": "Strong composition with vibrant colors and architectural contrast, but slightly cluttered foreground reduces Instagram hook potential.", + "latency_ms": 3336, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c63f60bb-2c2a-4ebc-b4e5-bd108a7e5e60", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 6, + "instagram_fit_score": 7, + "primary_subject": "couple in elevator", + "scene_tags": [ + "elevator", + "couple", + "selfie", + "metal walls", + "blue dress", + "curly hair" + ], + "suggested_caption": "Elevator selfie. No one else in the world. Just us.", + "reasoning": "Good lighting and candid moment, but composition is tight and colors are flat. Instagram-friendly due to vertical framing and emotional hook.", + "latency_ms": 3420, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9fc4be6d-dc08-457c-9f5a-1606fb96dd97", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple kissing", + "scene_tags": [ + "seville", + "spanish city", + "mountain view", + "romantic moment", + "overcast sky", + "tourist spot", + "greenery", + "selfie" + ], + "suggested_caption": "kissing on top of a hill with Seville below \ud83c\udf06", + "reasoning": "Good composition with emotional connection, but muted lighting reduces visual impact; fits IG scroll with strong subject and framing.", + "latency_ms": 3671, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 134 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "1d7f8084-eb2e-41e4-a380-d0983f6807e2", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man overlooking city", + "scene_tags": [ + "cityscape", + "overcast sky", + "mountain view", + "urban landscape", + "travel photo", + "wandering", + "mediterranean", + "stone wall" + ], + "suggested_caption": "Found my favorite spot. Sky\u2019s gray, but the view\u2019s worth it.", + "reasoning": "Good composition with subject centered, but muted colors and cloudy sky reduce visual impact. Instagram-friendly due to strong subject and vertical framing.", + "latency_ms": 4063, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 137 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f638054c-bad8-4ac1-83c2-1b0f5149fc76", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "flamenco performers", + "scene_tags": [ + "seville", + "flamenco", + "stage", + "guitar", + "performance", + "purple lighting", + "audience" + ], + "suggested_caption": "Live flamenco magic at Teatro Flamenco Sevilla. Feel the rhythm.", + "reasoning": "Good color contrast and stage lighting, but composition is slightly cluttered by audience silhouettes. Instagram-friendly due to strong subject and vertical framing.", + "latency_ms": 3745, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 131 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "8f36cc4f-67ee-419a-806a-393e02311846", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "garden", + "arched walls", + "sunlit", + "mediterranean", + "palm trees", + "staircase", + "planters", + "cultural" + ], + "suggested_caption": "Sun-drenched garden vibes. Where elegance meets nature.", + "reasoning": "Strong composition with warm tones and natural light, ideal for IG scroll-stopping. Subject is clear and framed vertically.", + "latency_ms": 3525, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "ef806816-857f-4829-9c43-fc7439005b24", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman with curly hair", + "scene_tags": [ + "cityscape", + "mountain view", + "blue dress", + "curly hair", + "overcast sky", + "selfie", + "mediterranean" + ], + "suggested_caption": "captured the view from the top. \ud83c\udf06", + "reasoning": "Strong subject and framing, but muted lighting reduces visual punch. Instagram-friendly with clear hook.", + "latency_ms": 3540, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 122 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "98c6d4f2-f935-4358-8db7-5de1da16c638", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "seville", + "plaza de espana", + "blue tile", + "sunset", + "architecture", + "river", + "travel" + ], + "suggested_caption": "Seville\u2019s magic captured in blue. \ud83c\udf1e #plazadesevilla", + "reasoning": "Strong composition with vibrant colors and iconic architecture, perfect for IG scroll-stopping. Aesthetic is polished but not overdone.", + "latency_ms": 3825, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 131 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "bacbae88-b736-43a5-972d-602d08a3d3a9", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "ivy-covered building", + "scene_tags": [ + "ivy", + "old building", + "europe", + "sunlit", + "balcony", + "greenery", + "architecture", + "vines" + ], + "suggested_caption": "Timeless charm. Ivy climbs old stone. Quiet streets, bright sky.", + "reasoning": "Strong contrast between green ivy and pale wall, vertical framing draws eyes upward, perfect for IG scroll-stopping.", + "latency_ms": 3771, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 129 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "9499f983-a5ee-416b-ae9c-9df25d846dfc", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "medieval castle", + "palm tree", + "blue dress", + "stone path", + "curly hair", + "historical site", + "travel photo", + "back view" + ], + "suggested_caption": "Walking through history in a blue dress. \ud83c\udf3f\ud83c\udff0", + "reasoning": "Strong color contrast and vertical framing make it scroll-stopping; aesthetic is polished but slightly overcast.", + "latency_ms": 3829, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "2f9f26c4-61ba-4578-a3a2-ca62f62556ad", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "palm trees street", + "scene_tags": [ + "palm trees", + "urban street", + "european architecture", + "cloudy sky", + "cityscape", + "shopping district", + "green shutters", + "street view" + ], + "suggested_caption": "Palm trees & old buildings. Quiet street, cloudy day. #travel", + "reasoning": "Good composition with vertical framing, but muted colors and overcast sky reduce visual impact. Instagram fit is moderate due to recognizable subject and vertical orientation.", + "latency_ms": 3973, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 142 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "deb79a4f-f939-4bd4-bf84-16a39ed5f134", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in mosaic room", + "scene_tags": [ + "morocco", + "mosaic", + "medina", + "travel", + "culture", + "blue dress", + "curly hair", + "elegant" + ], + "suggested_caption": "Lost in the patterns. Morocco\u2019s quiet magic.", + "reasoning": "Strong color harmony and cultural context, but composition leans slightly off-center; Instagram-friendly due to vertical framing and visual intrigue.", + "latency_ms": 3597, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 126 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "a218cf81-a745-4860-b036-dea56c4941f8", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "morocco", + "medina", + "ornate tiles", + "archway", + "fashion photography", + "cultural travel" + ], + "suggested_caption": "Lost in the blue. Morocco\u2019s hidden courtyard magic.", + "reasoning": "Strong color harmony and cultural context make it visually arresting, with vertical framing ideal for Instagram scrolling.", + "latency_ms": 3442, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 116 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "90a58b73-2d88-48a4-9fe4-ce70286f84d4", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "antique library", + "scene_tags": [ + "antique", + "bookshelf", + "ornate", + "vintage", + "pink walls", + "decorative", + "historical", + "cabinet" + ], + "suggested_caption": "A room of stories and history. Quietly grand.", + "reasoning": "Rich textures and warm tones create depth, but cluttered composition reduces Instagram appeal.", + "latency_ms": 3428, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 119 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "fcaab99b-7200-4f81-8642-eba0c3bc21ec", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 6, + "primary_subject": "ancient stone tower", + "scene_tags": [ + "mediterranean", + "old tower", + "pink flowers", + "greenery", + "overcast sky", + "historical site", + "planting" + ], + "suggested_caption": "ancient stone tower meets blooming pink flowers. quiet beauty.", + "reasoning": "balanced composition with strong vertical framing, but muted lighting reduces visual impact. good for IG but not portfolio-level.", + "latency_ms": 3704, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 126 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "be8661b0-f545-4afa-94c5-e10da5148041", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "medieval wall", + "palm tree", + "cobblestone path", + "blue dress", + "curly hair", + "arched gate", + "historical site" + ], + "suggested_caption": "blue dress against ancient walls. where history meets style.", + "reasoning": "Strong color contrast and composition make it visually striking, ideal for IG scroll-stopping.", + "latency_ms": 3905, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 123 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "f210a4ea-8cf9-47a3-a2b2-dcd99e26e4b7", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "man in garden", + "scene_tags": [ + "yellow wall", + "green vines", + "tropical plants", + "casual pose", + "outdoor seating", + "blue shirt", + "sunlit" + ], + "suggested_caption": "Found a quiet spot to recharge. \ud83c\udf3f", + "reasoning": "Balanced composition with warm tones and natural light; strong visual hook for IG due to subject and setting.", + "latency_ms": 3545, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 122 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "4cad0011-b3c6-4612-a398-9a5cae315282", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "night market crowd", + "scene_tags": [ + "night market", + "urban nightlife", + "crowded street", + "blue hour", + "cafe lights", + "european city", + "social gathering", + "street photography" + ], + "suggested_caption": "Night market vibes in the city. People, lights, and stories.", + "reasoning": "Good color contrast and composition, but slightly cluttered. Instagram-friendly due to lively crowd and vertical framing.", + "latency_ms": 3785, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 130 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "991386b2-325b-496b-a61c-76dadc8ca281", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "man in garden", + "scene_tags": [ + "palma", + "purple flowers", + "archway", + "historic building" + ], + "suggested_caption": "Found the perfect spot to pause and soak in the magic.", + "reasoning": "Strong composition with natural framing, vibrant colors, and a clear subject that draws the eye quickly.", + "latency_ms": 3087, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 103 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "c98270c9-ee08-4e17-9f2a-2b004a1fa25f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "blue tile wall", + "mediterranean", + "boho style", + "travel portrait", + "patterned background", + "curly hair", + "elegant dress", + "cultural heritage" + ], + "suggested_caption": "Blue tiles, blue dress, and a smile that tells a story. \ud83c\udf1e", + "reasoning": "Rich color harmony and patterned backdrop create visual interest, while vertical framing and subject pose work well for Instagram engagement.", + "latency_ms": 3896, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 141 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "0aa895b8-729e-46ed-a5cf-eea974827553", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "street corner buildings", + "scene_tags": [ + "urban", + "european", + "architecture", + "street", + "people", + "clouds", + "sunset" + ], + "suggested_caption": "Architecture meets everyday life in a European street corner.", + "reasoning": "Good color contrast and composition, but lacks the punch of a top-tier Instagram post due to busy street elements.", + "latency_ms": 3447, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "34258ec5-302b-4df3-a3a5-3ddfa7f4cd56", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "portuguese tiles", + "ornate doorway", + "blue dress", + "cultural heritage", + "travel photography", + "woman posing", + "vintage tiles", + "warm lighting" + ], + "suggested_caption": "Lost in the tiles. Portugal\u2019s artistry, my dress, my moment.", + "reasoning": "Rich colors and intricate tilework create visual depth; vertical framing works well for Instagram, with strong subject and immediate visual hook.", + "latency_ms": 3856, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 877, + "completion_tokens": 139 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "d84ea8b1-0ffd-4680-b0dd-fbf2e21c05ea", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "couple selfie", + "scene_tags": [ + "cityscape", + "tourist spot", + "curly hair", + "architecture" + ], + "suggested_caption": "captured the moment with the city behind us.", + "reasoning": "Good composition with natural light and clear subjects, but slightly overcast sky reduces vibrancy. Instagram-friendly framing with strong hook in first second.", + "latency_ms": 3478, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 111 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "09b42418-79f1-421e-9b7a-906df03ea290", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 7, + "instagram_fit_score": 8, + "primary_subject": "woman in blue dress", + "scene_tags": [ + "urban backdrop", + "brick wall", + "curly hair", + "cityscape", + "green trees", + "overcast sky", + "casual pose" + ], + "suggested_caption": "blue dress, city view, and a little confidence.", + "reasoning": "Strong subject and vertical framing, but muted lighting reduces visual punch.", + "latency_ms": 3521, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 115 + }, + { + "run_id": "2026-05-10-1424", + "asset_id": "7b80c556-78b3-473c-aaa9-e771e034918f", + "model": "qwen3vl-4b", + "prompt_version": "4bbb7e7721da24d9", + "aesthetic_score": 8, + "instagram_fit_score": 9, + "primary_subject": "woman in garden", + "scene_tags": [ + "palmas", + "alhambra", + "garden", + "sunlit", + "archway", + "elegant", + "travel" + ], + "suggested_caption": "Sun-drenched garden view from a hidden archway. \ud83c\udf3f", + "reasoning": "Strong composition with framing, vibrant colors, and a candid moment that hooks viewers quickly on Instagram.", + "latency_ms": 3781, + "parse_error": null, + "error": null, + "finish_reason": "stop", + "prompt_tokens": 973, + "completion_tokens": 122 + } +] \ No newline at end of file diff --git a/stacks/blog/.terraform.lock.hcl b/stacks/blog/.terraform.lock.hcl index a1ca7484..fabbc047 100644 --- a/stacks/blog/.terraform.lock.hcl +++ b/stacks/blog/.terraform.lock.hcl @@ -24,6 +24,14 @@ provider "registry.terraform.io/cloudflare/cloudflare" { ] } +provider "registry.terraform.io/goauthentik/authentik" { + version = "2024.12.1" + constraints = "~> 2024.10" + hashes = [ + "h1:roBMd+gi+TGgikH/bMzEI8JfvJiMAQWt+8FmokCrQIs=", + ] +} + provider "registry.terraform.io/hashicorp/helm" { version = "3.1.1" hashes = [ diff --git a/stacks/blog/backend.tf b/stacks/blog/backend.tf index 3c4947d2..20a8e977 100644 --- a/stacks/blog/backend.tf +++ b/stacks/blog/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "blog" } } diff --git a/stacks/blog/providers.tf b/stacks/blog/providers.tf index b337a2e9..012af700 100644 --- a/stacks/blog/providers.tf +++ b/stacks/blog/providers.tf @@ -9,6 +9,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 4" } + authentik = { + source = "goauthentik/authentik" + version = "~> 2024.10" + } } } diff --git a/stacks/cyberchef/.terraform.lock.hcl b/stacks/cyberchef/.terraform.lock.hcl index a1ca7484..fabbc047 100644 --- a/stacks/cyberchef/.terraform.lock.hcl +++ b/stacks/cyberchef/.terraform.lock.hcl @@ -24,6 +24,14 @@ provider "registry.terraform.io/cloudflare/cloudflare" { ] } +provider "registry.terraform.io/goauthentik/authentik" { + version = "2024.12.1" + constraints = "~> 2024.10" + hashes = [ + "h1:roBMd+gi+TGgikH/bMzEI8JfvJiMAQWt+8FmokCrQIs=", + ] +} + provider "registry.terraform.io/hashicorp/helm" { version = "3.1.1" hashes = [ diff --git a/stacks/cyberchef/backend.tf b/stacks/cyberchef/backend.tf index 4a5f3d9d..026404b7 100644 --- a/stacks/cyberchef/backend.tf +++ b/stacks/cyberchef/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "cyberchef" } } diff --git a/stacks/cyberchef/providers.tf b/stacks/cyberchef/providers.tf index b337a2e9..012af700 100644 --- a/stacks/cyberchef/providers.tf +++ b/stacks/cyberchef/providers.tf @@ -9,6 +9,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 4" } + authentik = { + source = "goauthentik/authentik" + version = "~> 2024.10" + } } } diff --git a/stacks/dbaas/modules/dbaas/main.tf b/stacks/dbaas/modules/dbaas/main.tf index 43a128de..f7222ca2 100644 --- a/stacks/dbaas/modules/dbaas/main.tf +++ b/stacks/dbaas/modules/dbaas/main.tf @@ -1149,7 +1149,8 @@ resource "null_resource" "pg_terraform_state_db" { provisioner "local-exec" { command = <<-EOT - kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas pg-cluster-1 -c postgres -- \ + PRIMARY=$(kubectl --kubeconfig ${var.kube_config_path} get cluster -n dbaas pg-cluster -o jsonpath='{.status.currentPrimary}') + kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas $PRIMARY -c postgres -- \ bash -c ' psql -U postgres -tc "SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = '"'"'terraform_state'"'"'" | grep -q 1 || \ psql -U postgres -c "CREATE ROLE terraform_state WITH LOGIN PASSWORD '"'"'changeme-vault-will-rotate'"'"'" @@ -1173,7 +1174,8 @@ resource "null_resource" "pg_payslip_ingest_db" { provisioner "local-exec" { command = <<-EOT - kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas pg-cluster-1 -c postgres -- \ + PRIMARY=$(kubectl --kubeconfig ${var.kube_config_path} get cluster -n dbaas pg-cluster -o jsonpath='{.status.currentPrimary}') + kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas $PRIMARY -c postgres -- \ bash -c ' psql -U postgres -tc "SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = '"'"'payslip_ingest'"'"'" | grep -q 1 || \ psql -U postgres -c "CREATE ROLE payslip_ingest WITH LOGIN PASSWORD '"'"'changeme-vault-will-rotate'"'"'" @@ -1197,7 +1199,8 @@ resource "null_resource" "pg_job_hunter_db" { provisioner "local-exec" { command = <<-EOT - kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas pg-cluster-1 -c postgres -- \ + PRIMARY=$(kubectl --kubeconfig ${var.kube_config_path} get cluster -n dbaas pg-cluster -o jsonpath='{.status.currentPrimary}') + kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas $PRIMARY -c postgres -- \ bash -c ' psql -U postgres -tc "SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = '"'"'job_hunter'"'"'" | grep -q 1 || \ psql -U postgres -c "CREATE ROLE job_hunter WITH LOGIN PASSWORD '"'"'changeme-vault-will-rotate'"'"'" @@ -1209,6 +1212,35 @@ resource "null_resource" "pg_job_hunter_db" { } } +# Postiz: 3 databases (postiz, temporal, temporal_visibility) all owned by the +# `postiz` role. Bundled bitnami PostgreSQL was retired 2026-05-09 in favour of +# this CNPG cluster β€” covered by postgresql-backup-per-db automatically. +# Role password placeholder; Vault static role `pg-postiz` rotates 7d. +resource "null_resource" "pg_postiz_dbs" { + depends_on = [null_resource.pg_cluster] + + triggers = { + role = "postiz" + dbs = "postiz,temporal,temporal_visibility" + } + + provisioner "local-exec" { + command = <<-EOT + PRIMARY=$(kubectl --kubeconfig ${var.kube_config_path} get cluster -n dbaas pg-cluster -o jsonpath='{.status.currentPrimary}') + kubectl --kubeconfig ${var.kube_config_path} exec -n dbaas $PRIMARY -c postgres -- \ + bash -c ' + psql -U postgres -tc "SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = '"'"'postiz'"'"'" | grep -q 1 || \ + psql -U postgres -c "CREATE ROLE postiz WITH LOGIN PASSWORD '"'"'changeme-vault-will-rotate'"'"'" + for db in postiz temporal temporal_visibility; do + psql -U postgres -tc "SELECT 1 FROM pg_catalog.pg_database WHERE datname = '"'"'$db'"'"'" | grep -q 1 || \ + psql -U postgres -c "CREATE DATABASE $db OWNER postiz" + psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE $db TO postiz" + done + ' + EOT + } +} + # Create wealthfolio_sync database for the SQLiteβ†’PG ETL sidecar that mirrors # Wealthfolio's daily_account_valuation/accounts/activities into PG so Grafana # can chart net worth, contributions, and growth. diff --git a/stacks/homepage/.terraform.lock.hcl b/stacks/homepage/.terraform.lock.hcl index a1ca7484..fabbc047 100644 --- a/stacks/homepage/.terraform.lock.hcl +++ b/stacks/homepage/.terraform.lock.hcl @@ -24,6 +24,14 @@ provider "registry.terraform.io/cloudflare/cloudflare" { ] } +provider "registry.terraform.io/goauthentik/authentik" { + version = "2024.12.1" + constraints = "~> 2024.10" + hashes = [ + "h1:roBMd+gi+TGgikH/bMzEI8JfvJiMAQWt+8FmokCrQIs=", + ] +} + provider "registry.terraform.io/hashicorp/helm" { version = "3.1.1" hashes = [ diff --git a/stacks/homepage/backend.tf b/stacks/homepage/backend.tf index fc2f2f60..946cf18e 100644 --- a/stacks/homepage/backend.tf +++ b/stacks/homepage/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "homepage" } } diff --git a/stacks/homepage/providers.tf b/stacks/homepage/providers.tf index b337a2e9..012af700 100644 --- a/stacks/homepage/providers.tf +++ b/stacks/homepage/providers.tf @@ -9,6 +9,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 4" } + authentik = { + source = "goauthentik/authentik" + version = "~> 2024.10" + } } } diff --git a/stacks/instagram-poster/modules/instagram-poster/main.tf b/stacks/instagram-poster/modules/instagram-poster/main.tf index 7fcb494d..d9d80cf4 100644 --- a/stacks/instagram-poster/modules/instagram-poster/main.tf +++ b/stacks/instagram-poster/modules/instagram-poster/main.tf @@ -103,6 +103,26 @@ resource "kubernetes_manifest" "external_secret" { secretKey = "IMMICH_PG_PASSWORD" remoteRef = { key = "instagram-poster", property = "immich_pg_password" } }, + # IG-archive dedup: tokens for Meta Graph API live ingest. Token + # is the long-lived (60-day) IG user access token. The token-refresh + # CronJob writes the rotated value back to Vault; ESO syncs it + # back into this Secret on its 15m interval. + { + secretKey = "IG_GRAPH_TOKEN" + remoteRef = { key = "instagram-poster", property = "ig_graph_long_lived_token" } + }, + { + secretKey = "IG_GRAPH_APP_ID" + remoteRef = { key = "instagram-poster", property = "ig_graph_app_id" } + }, + { + secretKey = "IG_GRAPH_APP_SECRET" + remoteRef = { key = "instagram-poster", property = "ig_graph_app_secret" } + }, + { + secretKey = "IG_BUSINESS_ACCOUNT_ID" + remoteRef = { key = "instagram-poster", property = "ig_business_account_id" } + }, ] } } @@ -215,6 +235,20 @@ resource "kubernetes_deployment" "instagram_poster" { name = "LOG_LEVEL" value = "INFO" } + # IG-archive dedup config. Defaults match the Python Settings + # class; override here so a flag flip is a `terraform apply` + # not a code change. `enabled=false` until the export-zip + # backfill + a few days of /ig-ingest produce a populated + # ig_posted_media table β€” we don't want to filter everything + # out on day one when the table is empty. + env { + name = "IG_DEDUP_ENABLED" + value = "false" + } + env { + name = "IG_ML_URL" + value = "http://immich-machine-learning.immich.svc.cluster.local:3003" + } volume_mount { name = "data" @@ -322,3 +356,151 @@ module "ingress_protected" { port = 80 service_name = "instagram-poster" } + +# IG-archive dedup live ingest. Three CronJobs all curl back into the +# in-cluster Service. /ig-ingest is idempotent (ON CONFLICT DO NOTHING), +# so missed runs / restarts are harmless. +# +# Cadence rationale (plan Β§4): +# stories β€” */30. Stories age out at 24h; running every 30m means a +# missed run still catches the entire window with margin. +# feed β€” every 6h. Feed posts don't expire; this is just for +# "what's been posted since last poll". +# refresh β€” daily 02:00. Long-lived token has 60-day TTL; refreshing +# daily is wildly conservative but cheap, and the +# alternative ("rotate at expiry-7d") needs persistent state. + +locals { + ig_cron_image = "curlimages/curl:8.10.1" +} + +resource "kubernetes_cron_job_v1" "ig_ingest_stories" { + metadata { + name = "ig-ingest-stories" + namespace = kubernetes_namespace.instagram_poster.metadata[0].name + labels = local.labels + } + spec { + schedule = "*/30 * * * *" + concurrency_policy = "Forbid" + successful_jobs_history_limit = 1 + failed_jobs_history_limit = 3 + job_template { + metadata {} + spec { + backoff_limit = 1 + template { + metadata {} + spec { + restart_policy = "OnFailure" + container { + name = "ingest" + image = local.ig_cron_image + command = [ + "sh", "-c", + "curl -fsS -X POST http://instagram-poster.instagram-poster.svc.cluster.local/ig-ingest -H 'Content-Type: application/json' -d '{\"include\":[\"stories\"]}'", + ] + resources { + requests = { cpu = "10m", memory = "32Mi" } + limits = { memory = "64Mi" } + } + } + } + } + } + } + } + lifecycle { + ignore_changes = [spec[0].job_template[0].spec[0].template[0].spec[0].dns_config] # KYVERNO_LIFECYCLE_V1 + } + depends_on = [kubernetes_deployment.instagram_poster] +} + +resource "kubernetes_cron_job_v1" "ig_ingest_feed" { + metadata { + name = "ig-ingest-feed" + namespace = kubernetes_namespace.instagram_poster.metadata[0].name + labels = local.labels + } + spec { + schedule = "0 */6 * * *" + concurrency_policy = "Forbid" + successful_jobs_history_limit = 1 + failed_jobs_history_limit = 3 + job_template { + metadata {} + spec { + backoff_limit = 1 + template { + metadata {} + spec { + restart_policy = "OnFailure" + container { + name = "ingest" + image = local.ig_cron_image + command = [ + "sh", "-c", + "curl -fsS -X POST http://instagram-poster.instagram-poster.svc.cluster.local/ig-ingest -H 'Content-Type: application/json' -d '{\"include\":[\"feed\"]}'", + ] + resources { + requests = { cpu = "10m", memory = "32Mi" } + limits = { memory = "64Mi" } + } + } + } + } + } + } + } + lifecycle { + ignore_changes = [spec[0].job_template[0].spec[0].template[0].spec[0].dns_config] # KYVERNO_LIFECYCLE_V1 + } + depends_on = [kubernetes_deployment.instagram_poster] +} + +# Daily token refresh. Hits /ig-refresh-token which returns the new token +# in JSON; we don't write it back to Vault here β€” that's a follow-up +# decision (plan Β§6, open item #2). For now the new token is logged and +# operators rotate manually if it ever fails. The 60-day TTL gives plenty +# of room. +resource "kubernetes_cron_job_v1" "ig_refresh_token" { + metadata { + name = "ig-refresh-token" + namespace = kubernetes_namespace.instagram_poster.metadata[0].name + labels = local.labels + } + spec { + schedule = "0 2 * * *" + concurrency_policy = "Forbid" + successful_jobs_history_limit = 1 + failed_jobs_history_limit = 3 + job_template { + metadata {} + spec { + backoff_limit = 1 + template { + metadata {} + spec { + restart_policy = "OnFailure" + container { + name = "refresh" + image = local.ig_cron_image + command = [ + "sh", "-c", + "curl -fsS -X POST http://instagram-poster.instagram-poster.svc.cluster.local/ig-refresh-token", + ] + resources { + requests = { cpu = "10m", memory = "32Mi" } + limits = { memory = "64Mi" } + } + } + } + } + } + } + } + lifecycle { + ignore_changes = [spec[0].job_template[0].spec[0].template[0].spec[0].dns_config] # KYVERNO_LIFECYCLE_V1 + } + depends_on = [kubernetes_deployment.instagram_poster] +} diff --git a/stacks/jsoncrack/.terraform.lock.hcl b/stacks/jsoncrack/.terraform.lock.hcl index a1ca7484..fabbc047 100644 --- a/stacks/jsoncrack/.terraform.lock.hcl +++ b/stacks/jsoncrack/.terraform.lock.hcl @@ -24,6 +24,14 @@ provider "registry.terraform.io/cloudflare/cloudflare" { ] } +provider "registry.terraform.io/goauthentik/authentik" { + version = "2024.12.1" + constraints = "~> 2024.10" + hashes = [ + "h1:roBMd+gi+TGgikH/bMzEI8JfvJiMAQWt+8FmokCrQIs=", + ] +} + provider "registry.terraform.io/hashicorp/helm" { version = "3.1.1" hashes = [ diff --git a/stacks/jsoncrack/backend.tf b/stacks/jsoncrack/backend.tf index 828bee95..8aeb6f37 100644 --- a/stacks/jsoncrack/backend.tf +++ b/stacks/jsoncrack/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "jsoncrack" } } diff --git a/stacks/jsoncrack/providers.tf b/stacks/jsoncrack/providers.tf index b337a2e9..012af700 100644 --- a/stacks/jsoncrack/providers.tf +++ b/stacks/jsoncrack/providers.tf @@ -9,6 +9,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 4" } + authentik = { + source = "goauthentik/authentik" + version = "~> 2024.10" + } } } diff --git a/stacks/llama-cpp/main.tf b/stacks/llama-cpp/main.tf index f3289856..289f058f 100644 --- a/stacks/llama-cpp/main.tf +++ b/stacks/llama-cpp/main.tf @@ -65,7 +65,7 @@ locals { "-c ${cfg.ctx_size}", "-np 1", "--jinja", - "-fa", + "-fa on", ]) ttl = 600 # unload after 10 min idle checkEndpoint = "/health" diff --git a/stacks/real-estate-crawler/backend.tf b/stacks/real-estate-crawler/backend.tf index 920f3a9c..c9237aa8 100644 --- a/stacks/real-estate-crawler/backend.tf +++ b/stacks/real-estate-crawler/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "real-estate-crawler" } } diff --git a/stacks/travel_blog/.terraform.lock.hcl b/stacks/travel_blog/.terraform.lock.hcl index 5b74a7af..7b0b0924 100644 --- a/stacks/travel_blog/.terraform.lock.hcl +++ b/stacks/travel_blog/.terraform.lock.hcl @@ -24,6 +24,14 @@ provider "registry.terraform.io/cloudflare/cloudflare" { ] } +provider "registry.terraform.io/goauthentik/authentik" { + version = "2024.12.1" + constraints = "~> 2024.10" + hashes = [ + "h1:roBMd+gi+TGgikH/bMzEI8JfvJiMAQWt+8FmokCrQIs=", + ] +} + provider "registry.terraform.io/hashicorp/helm" { version = "3.1.1" hashes = [ diff --git a/stacks/travel_blog/backend.tf b/stacks/travel_blog/backend.tf index b6a73d31..9689b7bc 100644 --- a/stacks/travel_blog/backend.tf +++ b/stacks/travel_blog/backend.tf @@ -1,7 +1,7 @@ # Generated by Terragrunt. Sig: nIlQXj57tbuaRZEa terraform { backend "pg" { - conn_str = "postgres://terraform_state:SBlzGxotNUN6HH9d0S-m@10.0.20.200:5432/terraform_state?sslmode=disable" + conn_str = "postgres://terraform_state:ts7DGcKmTTY-5ujz4mhh@10.0.20.200:5432/terraform_state?sslmode=disable" schema_name = "travel_blog" } } diff --git a/stacks/travel_blog/providers.tf b/stacks/travel_blog/providers.tf index b337a2e9..012af700 100644 --- a/stacks/travel_blog/providers.tf +++ b/stacks/travel_blog/providers.tf @@ -9,6 +9,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 4" } + authentik = { + source = "goauthentik/authentik" + version = "~> 2024.10" + } } } diff --git a/stacks/vault/main.tf b/stacks/vault/main.tf index a47379ff..66f60aac 100644 --- a/stacks/vault/main.tf +++ b/stacks/vault/main.tf @@ -539,7 +539,8 @@ resource "vault_database_secret_backend_connection" "postgresql" { "pg-health", "pg-linkwarden", "pg-affine", "pg-woodpecker", "pg-claude-memory", "pg-terraform-state", "pg-payslip-ingest", "pg-job-hunter", - "pg-wealthfolio-sync", "pg-fire-planner" + "pg-wealthfolio-sync", "pg-fire-planner", + "pg-postiz", ] postgresql { @@ -677,6 +678,17 @@ resource "vault_database_secret_backend_static_role" "pg_terraform_state" { rotation_period = 604800 } +# Postiz uses three databases (postiz, temporal, temporal_visibility) all owned +# by the `postiz` PG role. One static role covers all three. Migrated from the +# bundled bitnami PG StatefulSet to CNPG on 2026-05-09. +resource "vault_database_secret_backend_static_role" "pg_postiz" { + backend = vault_mount.database.path + db_name = vault_database_secret_backend_connection.postgresql.name + name = "pg-postiz" + username = "postiz" + rotation_period = 604800 +} + resource "vault_database_secret_backend_static_role" "pg_payslip_ingest" { backend = vault_mount.database.path db_name = vault_database_secret_backend_connection.postgresql.name