@danhachuel/thunderbolt 0.4.77 → 0.4.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app/main.py CHANGED
@@ -69,7 +69,7 @@ from hermes_ui.update_manager import check_version, restart_current_process, upd
69
69
  from hermes_ui.script_documents import list_script_documents, read_script_document, save_script_document, script_storage_path
70
70
  from hermes_ui.script_generation import generate_script_document
71
71
  from hermes_ui.voice_preview import DEFAULT_SAMPLE, load_preview_file, synthesize_preview
72
- from hermes_ui.elevenlabs_voices import ElevenLabsVoicesError, fetch_personal_voices, personal_voice_options
72
+ from hermes_ui.elevenlabs_voices import ElevenLabsVoicesError, cached_personal_voices, fetch_personal_voices, personal_voice_options
73
73
  from hermes_ui.thumbnail_generation import ThumbnailGenerationError, generate_thumbnail_image
74
74
  from hermes_ui.thumbnails import (
75
75
  generate_thumbnail_for_task,
@@ -3324,7 +3324,7 @@ def render_music_creation():
3324
3324
  ("music_task_prompt", "prompt"),
3325
3325
  ):
3326
3326
  st.session_state[state_key] = str(generated_fields.get(generated_key) or "")
3327
- provider_label = st.selectbox("Provider de geração musical", ["Suno AI", "Google Lyria"], key="music_task_provider")
3327
+ provider_label = st.selectbox("Provider de geração musical", ["Suno AI", "Google Lyria", "Eleven Music"], key="music_task_provider")
3328
3328
  theme = st.text_input("Tema / assunto principal", key="music_task_theme", placeholder="Ex.: uma viagem nocturna pela costa portuguesa")
3329
3329
  title = st.text_input("Título da música", key="music_task_title")
3330
3330
  language = st.selectbox(
@@ -3336,6 +3336,26 @@ def render_music_creation():
3336
3336
  )
3337
3337
  genre = st.selectbox("Género musical", list(MUSIC_GENRES), key="music_task_genre")
3338
3338
  vocal = st.selectbox("Vocal", list(MUSIC_VOCAL_OPTIONS), key="music_task_vocal")
3339
+ eleven_voice_id = ""
3340
+ eleven_voice_gender = ""
3341
+ if provider_label == "Eleven Music":
3342
+ cached_voices = cached_personal_voices()
3343
+ if not cached_voices:
3344
+ st.info("Sincronize primeiro as vozes pessoais em Vozes Personalizadas. O Eleven Music não disponibiliza voz de coral para este selector.")
3345
+ else:
3346
+ voice_options = {str(item.get("voice_id")): item for item in cached_voices if item.get("voice_id")}
3347
+ selected_voice_id = st.selectbox(
3348
+ "Voz personalizada (Eleven Music)",
3349
+ [""] + list(voice_options),
3350
+ format_func=lambda item: "Sem voz personalizada" if not item else str(voice_options[item].get("name") or item),
3351
+ key="music_task_eleven_voice",
3352
+ )
3353
+ eleven_voice_id = selected_voice_id
3354
+ selected_voice = voice_options.get(selected_voice_id, {})
3355
+ labels = selected_voice.get("labels") if isinstance(selected_voice.get("labels"), dict) else {}
3356
+ raw_gender = str(labels.get("gender") or labels.get("sex") or "").strip().casefold()
3357
+ eleven_voice_gender = "female" if raw_gender in {"female", "feminino", "woman", "mulher"} else ("male" if raw_gender in {"male", "masculino", "man", "homem"} else "")
3358
+ st.caption(f"Tipo de voz detectado automaticamente: {eleven_voice_gender or 'não identificado'}. Vozes de coral não estão disponíveis no Eleven Music.")
3339
3359
  references = st.text_area(
3340
3360
  "Referências culturais, paisagens, clima ou artistas similares (opcional)",
3341
3361
  key="music_task_references",
@@ -3380,6 +3400,8 @@ def render_music_creation():
3380
3400
  vocal=vocal,
3381
3401
  references=references,
3382
3402
  theme=theme,
3403
+ voice_id=eleven_voice_id,
3404
+ voice_gender=eleven_voice_gender,
3383
3405
  )
3384
3406
  st.success(f"Música criada no Music Backlog: {task['title']}")
3385
3407
  st.rerun()
@@ -126,3 +126,9 @@ def personal_voice_options(settings: dict[str, Any]) -> dict[str, str]:
126
126
  for voice in cache.get("voices", [])
127
127
  if isinstance(voice, dict) and voice.get("voice_id")
128
128
  }
129
+
130
+
131
+ def cached_personal_voices() -> list[dict[str, Any]]:
132
+ """Return the locally cached personal voices without making a network call."""
133
+ cache = _read_cache()
134
+ return [voice for voice in (cache or {}).get("voices", []) if isinstance(voice, dict)]
@@ -155,6 +155,8 @@ def create_music_task(
155
155
  vocal: str = "",
156
156
  references: str = "",
157
157
  theme: str = "",
158
+ voice_id: str = "",
159
+ voice_gender: str = "",
158
160
  ) -> dict[str, Any]:
159
161
  """Enqueue one audio-only generation; no video task or video worker is used."""
160
162
  cleaned_prompt = str(prompt or "").strip()
@@ -164,7 +166,7 @@ def create_music_task(
164
166
  task = {
165
167
  "id": f"music_{uuid.uuid4().hex[:12]}",
166
168
  "kind": "audio_generation",
167
- "provider": "lyria" if str(provider).strip().casefold() == "google lyria" else "suno",
169
+ "provider": "lyria" if str(provider).strip().casefold() == "google lyria" else ("eleven_music" if str(provider).strip().casefold() == "eleven music" else "suno"),
168
170
  "model": str(model or "").strip(),
169
171
  "title": str(title or "Música sem título").strip() or "Música sem título",
170
172
  "prompt": cleaned_prompt,
@@ -173,6 +175,8 @@ def create_music_task(
173
175
  "vocal": str(vocal or "").strip(),
174
176
  "references": str(references or "").strip(),
175
177
  "theme": str(theme or "").strip(),
178
+ "voice_id": str(voice_id or "").strip(),
179
+ "voice_gender": str(voice_gender or "").strip().casefold(),
176
180
  "duration_seconds": 120,
177
181
  "state": "to_do",
178
182
  "stage": "music_generation",
@@ -258,6 +262,33 @@ def request_lyria_generation(settings: dict[str, Any], prompt: str, title: str =
258
262
  return {"ok": False, "message": "Não foi possível contactar Google Lyria.", "data": {}}
259
263
 
260
264
 
265
+ def request_eleven_music_generation(settings: dict[str, Any], prompt: str, title: str = "", model: str = "music_v2", *, voice_id: str = "", voice_gender: str = "") -> dict[str, Any]:
266
+ """Generate music through Eleven Music's synchronous Music API."""
267
+ api_key = str(settings.get("elevenlabs_api_key") or "").strip()
268
+ if not api_key:
269
+ return {"ok": False, "message": "Configure a API Key do ElevenLabs em Configuração API antes de solicitar Eleven Music.", "data": {}}
270
+ clean_prompt = str(prompt or "").strip()
271
+ if voice_id:
272
+ gender = voice_gender if voice_gender in {"male", "female"} else "unspecified"
273
+ clean_prompt = f"{clean_prompt}\nVocal principal: voz personalizada ElevenLabs seleccionada ({gender}). Não usar coro."
274
+ try:
275
+ response = requests.post(
276
+ "https://api.elevenlabs.io/v1/music",
277
+ params={"output_format": "mp3_44100_128"},
278
+ headers={"xi-api-key": api_key, "Content-Type": "application/json"},
279
+ json={"prompt": clean_prompt[:4100], "model_id": model or "music_v2", "force_instrumental": False},
280
+ timeout=300,
281
+ )
282
+ if response.status_code >= 400:
283
+ return {"ok": False, "message": f"Eleven Music devolveu HTTP {response.status_code}.", "data": {"status_code": response.status_code}}
284
+ if not response.content:
285
+ return {"ok": False, "message": "Eleven Music não devolveu áudio.", "data": {}}
286
+ output = store_music_file(f"{title or 'eleven-music-generated'}.mp3", response.content)
287
+ return {"ok": True, "message": "Música gerada por Eleven Music.", "data": {"audio_path": str(output), "model": model or "music_v2", "voice_id": voice_id, "voice_gender": voice_gender}}
288
+ except (requests.RequestException, OSError, ValueError) as exc:
289
+ return {"ok": False, "message": f"Não foi possível contactar Eleven Music: {exc}", "data": {}}
290
+
291
+
261
292
  def run_music_task(task_id: str, settings: dict[str, Any]) -> dict[str, Any] | None:
262
293
  """Run exactly one queued audio generation and persist only its audio artefact."""
263
294
  task = next((record for record in list_music_tasks() if str(record.get("id") or "") == str(task_id)), None)
@@ -268,6 +299,9 @@ def run_music_task(task_id: str, settings: dict[str, Any]) -> dict[str, Any] | N
268
299
  if provider == "lyria":
269
300
  result = request_lyria_generation(settings, str(task.get("prompt") or ""), str(task.get("title") or ""), str(task.get("model") or ""))
270
301
  audio_path = str((result.get("data") or {}).get("audio_path") or "")
302
+ elif provider == "eleven_music":
303
+ result = request_eleven_music_generation(settings, str(task.get("prompt") or ""), str(task.get("title") or ""), str(task.get("model") or "music_v2"), voice_id=str(task.get("voice_id") or ""), voice_gender=str(task.get("voice_gender") or ""))
304
+ audio_path = str((result.get("data") or {}).get("audio_path") or "")
271
305
  else:
272
306
  result = request_suno_generation(
273
307
  settings,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.4.77",
3
+ "version": "0.4.79",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "license": "MIT",
6
6
  "main": "scripts/cli.mjs",
@@ -0,0 +1,221 @@
1
+ 🔒 STYLE LOCK — NON-NEGOTIABLE
2
+
3
+ Warm, engaging, and educational thumbnails for a channel dedicated to decoding cat behavior and feline psychology. The visual language is approachable, curiosity-driven, and emotionally resonant — conveying the mystery and charm of cats while promising clear, science-backed insights into their behavior. Thumbnails feature expressive cats in relatable everyday situations (staring, sleeping, following, ignoring), often combined with bold, curiosity-driven text that promises to reveal the "hidden meaning" behind common feline behaviors. The overall vibe is friendly, trustworthy, and slightly playful — not cold or clinical, not overly dramatic, and never cluttered or chaotic.
4
+
5
+ ❌ Not allowed:
6
+
7
+ Cold, clinical, or overly scientific aesthetics (keep it warm and accessible)
8
+
9
+ Dark, gloomy, or menacing imagery (cats should look cute or intriguing, not scary)
10
+
11
+ Cluttered frames with more than 3–4 distinct visual elements
12
+
13
+ Text that exceeds 6–8 words total on the thumbnail
14
+
15
+ Aggressive "clickbait" graphics (no neon arrows, no shock expressions)
16
+
17
+ Generic stock photos of cats that don't feel personal or relatable
18
+
19
+ Overly polished or studio-style photography — keep it natural and authentic
20
+
21
+ 🧍‍♂️ FRAMING & POSE
22
+
23
+ Primary subject: A cat (or multiple cats) displaying a specific behavior or expression — typically one of the following:
24
+
25
+ A cat staring directly at the camera — creating a sense of connection and mystery
26
+
27
+ A cat in a relatable everyday pose — sleeping, following, ignoring, kneading, zooming
28
+
29
+ A close-up of a cat's face — highlighting eyes, ears, or whiskers that communicate emotion
30
+
31
+ A cat interacting with its environment — pushing things off surfaces, staring at nothing, etc.
32
+
33
+ A cat with a human element — hands petting, a lap, or the cat observing the owner
34
+
35
+ Framing: Close-up to medium shots. The cat occupies 50–70% of the frame, filling the center or positioned slightly off-center. The cat's face and eyes are the primary focal point, creating emotional connection with the viewer.
36
+
37
+ Angle: Eye-level with the cat — creating a sense of equality and connection. Sometimes slightly below (looking up at the cat) to emphasize curiosity, or slightly above to show the cat in its environment.
38
+
39
+ Energy: Calm, curious, and slightly mysterious — the imagery conveys "your cat is trying to tell you something" and "there's more to this behavior than meets the eye."
40
+
41
+ Cropping: Generous — cats are shown with enough context to understand the situation, but close enough to see facial expressions and body language cues. Never cropped so tightly that the cat's expression becomes unclear.
42
+
43
+ 🎨 BACKGROUND & LIGHTING
44
+
45
+ Environment: Warm, familiar, everyday settings — typically:
46
+
47
+ Inside a home — living rooms, bedrooms, kitchens, hallways
48
+
49
+ Cozy, natural lighting — soft window light, warm lamps, or golden-hour sunlight
50
+
51
+ Simple, uncluttered backgrounds — letting the cat stand out
52
+
53
+ Occasional outdoor settings — gardens, patios, or windowsills
54
+
55
+ Lighting: Warm, soft, natural lighting — often from a window or lamp. Creates a cozy, intimate atmosphere. No harsh studio lighting, no artificial feel.
56
+
57
+ Depth: Moderate — foreground (cat), midground (contextual elements like furniture or floor), background (room or outdoor setting). Creates a sense of being right there with the cat.
58
+
59
+ Visual noise: Low — backgrounds are clean and uncluttered, allowing the cat and any text to stand out clearly.
60
+
61
+ 🧭 IDENTIFICADORES / SÍMBOLOS DO CANAL
62
+
63
+ Recurring visual symbols:
64
+
65
+ The cat itself — the channel's recurring "star" (likely a specific cat or cats that viewers recognize)
66
+
67
+ Cat body language cues — tail position, ear position, pupil dilation, whisker movement
68
+
69
+ Everyday cat behaviors — sleeping, staring, following, ignoring, kneading, zoomies
70
+
71
+ Human elements — hands, laps, furniture — showing the cat-human relationship
72
+
73
+ Simple icons — paw prints, hearts, thought bubbles (used sparingly)
74
+
75
+ Placement: The cat is the primary visual focus. Additional elements are integrated naturally into the scene — not overlaid as stickers.
76
+
77
+ Color symbolism:
78
+
79
+ Warm tones — comfort, trust, home
80
+
81
+ Soft neutrals — authenticity, simplicity
82
+
83
+ Cat's natural colors — orange, black, white, grey, calico
84
+
85
+ 🚨 VISUAL ATTENTION ELEMENT
86
+
87
+ Usage: Minimal and purposeful. The channel relies on the cat's expressive face and the curiosity-driven text, not aggressive graphics.
88
+
89
+ If used:
90
+
91
+ A subtle highlight or glow around the cat's eyes or face
92
+
93
+ A gentle arrow or circle pointing to a specific behavioral detail (rare)
94
+
95
+ No emojis, no neon effects, no aggressive arrows
96
+
97
+ Rule: The "attention" comes from the cat's expression and the promise of hidden meaning — not from visual gimmicks. Keep it authentic and educational.
98
+
99
+ 📝 TEXT STYLE
100
+
101
+ Structure:
102
+
103
+ Maximum 2 lines of text
104
+
105
+ Positioned prominently — often centered at the bottom, lower third, or along the side
106
+
107
+ Text occupies approximately 15–20% of the thumbnail area
108
+
109
+ Typography:
110
+
111
+ Bold, clean, sans-serif font (e.g., Montserrat, Roboto, or similar modern font) — friendly and readable
112
+
113
+ Primary text: White or light-colored, with a strong dark outline or drop shadow for contrast
114
+
115
+ Secondary text (if used): Smaller, in a contrasting warm color (orange, yellow, or white)
116
+
117
+ Hierarchy:
118
+
119
+ Line 1: Primary hook (largest, boldest) — 3–5 words max
120
+
121
+ Line 2: Supporting context (smaller) — 2–4 words max
122
+
123
+ Background for text: Often a semi-transparent dark overlay or gradient fade at the bottom of the image to ensure text readability against varied backgrounds.
124
+
125
+ 🧠 TEXT PSYCHOLOGY
126
+
127
+ Tone: Curious, educational, and slightly revelatory — the text promises hidden meanings, surprising insights, and practical understanding of cat behavior. It invites the viewer to see their cat in a new light.
128
+
129
+ Common psychological triggers observed/inferred:
130
+
131
+ Curiosity/Revelation: "What Your Cat's Stare Really Means" / "The Hidden Meaning Behind..."
132
+
133
+ Relatability: "Why Your Cat Follows You Everywhere"
134
+
135
+ Surprise: "What Your Cat Is Trying to Tell You"
136
+
137
+ Practical benefit: "How to Understand Your Cat Better"
138
+
139
+ Question: "Does Your Cat Actually Love You?"
140
+
141
+ Examples of likely headline patterns:
142
+
143
+ "What Your Cat's [Behavior] Really Means"
144
+
145
+ "Why Cats [Do This Surprising Thing]"
146
+
147
+ "The Truth About [Common Cat Behavior]"
148
+
149
+ "How to Tell If Your Cat [Feels/Thinks X]"
150
+
151
+ "[Number] Signs Your Cat [Is Trying to Tell You Something]"
152
+
153
+ 🎯 COMPOSITION RULES
154
+
155
+ Rule of thirds: Primary subject (cat) placed centrally or slightly off-center. Text occupies the bottom third. The background provides context in the upper portion.
156
+
157
+ Focal hierarchy:
158
+
159
+ Primary: The cat's face and expression (emotional connection)
160
+
161
+ Secondary: Text (the promise/hook)
162
+
163
+ Tertiary: Supporting visual details (environment, body language cues)
164
+
165
+ Negative space: Moderate — enough room around the cat and text to avoid clutter, but the cat fills a significant portion of the frame.
166
+
167
+ Distraction control: Maximum 3–4 distinct visual elements total (cat, text, 1–2 supporting elements like background context).
168
+
169
+ Mobile-first: Text must be large enough to read on a smartphone screen. The cat's face must be clearly visible and emotionally expressive even at small sizes.
170
+
171
+ 📐 FORMAT & QUALITY
172
+
173
+ Aspect ratio:
174
+ 16:9
175
+
176
+ Resolution:
177
+ 1280 × 720 minimum
178
+
179
+ Image style: Natural, warm, authentic photography — not overly stylized or filtered. The imagery should feel personal, relatable, and cozy — like you're looking at your own cat. Slightly warm color grading (golden/cozy tones) is characteristic.
180
+
181
+ Sharpness: Crisp and clear — natural photography quality with good detail on the cat's face and expression. Not overly processed or artificial.
182
+
183
+ Technical restrictions: No cartoonish illustrations (unless the channel uses animated style, which is suggested by job postings). No low-quality stock photos. Imagery should feel authentic and relatable — like a cat you might know.
184
+
185
+ 🧠 FINAL OBJECTIVE
186
+
187
+ Primary goal:
188
+ Maximize YouTube CTR for cat behavior / feline psychology / pet education content
189
+
190
+ Target emotional triggers:
191
+
192
+ Curiosity about what cats are really thinking
193
+
194
+ Desire to understand and connect with one's cat
195
+
196
+ Love and affection for cats as family members
197
+
198
+ Surprise at discovering hidden meanings in everyday behaviors
199
+
200
+ Practical desire to improve the cat-human relationship
201
+
202
+ Target audience: Cat owners, cat lovers, and anyone curious about feline psychology — from new cat parents to experienced owners who want to deepen their understanding of their feline companions.
203
+
204
+ 🧾 FINAL INPUT FORMAT
205
+
206
+ VIDEO TITLE:
207
+ "[placeholder — will be filled in the next step with the actual video title/script]"
208
+
209
+ ⚙️ FINAL SYSTEM INSTRUCTION
210
+
211
+ You are a thumbnail designer for the Felunee YouTube channel. Using the style guide above, generate 2–4 headline options (2–5 words each) derived from the provided VIDEO TITLE. Then create a thumbnail image that follows all style rules above:
212
+
213
+ Natural, warm photography (expressive cat in a relatable everyday situation)
214
+
215
+ Cozy, warm color palette — soft lighting, home environments
216
+
217
+ Bold, curiosity-driven text at the bottom (max 2 lines, clean font with outline)
218
+
219
+ 1–2 supporting elements (contextual background, subtle behavioral cues)
220
+
221
+ No aggressive clickbait styling — keep it educational, warm, and curiosity-driven
@@ -0,0 +1,223 @@
1
+ 🔒 STYLE LOCK — NON-NEGOTIABLE
2
+
3
+ Dramatic, intrigue-driven, and emotionally charged thumbnails for a channel covering celebrity scandals, controversial narratives, and high-stakes conflicts. The visual language is sensational, mysterious, and captivating — conveying shocking revelations, hidden truths, and dramatic twists in the lives of public figures. Thumbnails feature striking close-ups of celebrity faces, dramatic split compositions, or symbolic imagery (cracked masks, spotlights, courtroom scenes) combined with bold, urgent text that promises scandal, betrayal, and jaw-dropping revelations. The overall vibe is intense, gossip-driven, and slightly dark — not cheerful, not academic, and never understated.
4
+
5
+ ❌ Not allowed:
6
+
7
+ Bright, cheerful, or playful aesthetics (keep it dramatic and serious)
8
+
9
+ Cartoonish or childish illustrations (use real celebrity/event photography)
10
+
11
+ Cluttered frames with more than 3–4 distinct visual elements
12
+
13
+ Text that exceeds 5–6 words total on the thumbnail
14
+
15
+ Academic or dry presentation (keep it sensational and engaging)
16
+
17
+ Low-quality or blurry celebrity imagery (must look polished and impactful)
18
+
19
+ 🧍‍♂️ FRAMING & POSE
20
+
21
+ Primary subject: A celebrity, public figure, or key person involved in the story — typically one of the following:
22
+
23
+ A close-up of a celebrity's face — showing a dramatic expression (shock, sadness, anger, intensity)
24
+
25
+ A split composition — two faces or two contrasting images (before/after, public vs. private, accuser vs. accused)
26
+
27
+ A symbolic image — a cracked mask, a spotlight on a dark stage, a courtroom gavel, paparazzi cameras
28
+
29
+ An object central to the scandal — a wedding ring, a contract, a car, a microphone
30
+
31
+ Framing: Close-up to medium shots. The subject occupies 50–70% of the frame. Faces are large and emotionally expressive — the viewer should feel the drama immediately.
32
+
33
+ Angle: Straight-on or slightly dramatic angles — low angles for power figures, high angles for vulnerability, or confrontational straight-on stares.
34
+
35
+ Energy: Intense, scandalous, and gripping — the imagery conveys "you won't believe what happened" and "the truth is finally coming out."
36
+
37
+ Cropping: Tight but not claustrophobic — faces fill the frame with enough room for text overlay. Cropping emphasizes emotion and intensity.
38
+
39
+ 🎨 BACKGROUND & LIGHTING
40
+
41
+ Environment: Dramatic, atmospheric settings — typically:
42
+
43
+ Dark or moody backgrounds — black, deep red, dark blue, or gradient shadows
44
+
45
+ Studio-style lighting — dramatic spotlights, silhouettes, high-contrast chiaroscuro
46
+
47
+ Symbolic environments — a courtroom, a red carpet, a press conference, a private room
48
+
49
+ News-style graphics — subtle overlays suggesting "breaking news" or "exclusive" (used sparingly)
50
+
51
+ Lighting: High-contrast, dramatic lighting — strong shadows, selective highlights, often with a single dramatic light source (spotlight, window light, flash photography). Creates a sense of revelation and exposure.
52
+
53
+ Depth: Moderate — layered compositions with foreground (subject), midground (contextual elements), and background (dark atmosphere). Creates a sense of depth and intrigue.
54
+
55
+ Visual noise: Low to moderate — backgrounds are atmospheric but not cluttered, allowing the subject and text to dominate.
56
+
57
+ 🧭 IDENTIFICADORES / SÍMBOLOS DO CANAL
58
+
59
+ Recurring visual symbols:
60
+
61
+ Celebrity faces — the primary visual element across most thumbnails
62
+
63
+ Split imagery — before/after, public/private, two opposing figures
64
+
65
+ Dramatic lighting effects — spotlights, shadows, silhouettes
66
+
67
+ Symbolic objects — wedding rings, contracts, gavels, microphones, cameras
68
+
69
+ News-style elements — subtle "breaking" or "exclusive" indicators (rare)
70
+
71
+ Contrasting color palettes — warm vs. cool, light vs. dark, to emphasize conflict
72
+
73
+ Placement: Symbols are integrated naturally into the scene. The celebrity face is the star; additional elements provide context and drama.
74
+
75
+ Color symbolism:
76
+
77
+ Dark/Black — mystery, scandal, the unknown
78
+
79
+ Red — danger, passion, conflict, urgency
80
+
81
+ Gold/Yellow — spotlight, revelation, fame
82
+
83
+ Blue — cold truth, exposure, the public eye
84
+
85
+ 🚨 VISUAL ATTENTION ELEMENT
86
+
87
+ Usage: Minimal and strategic. The channel relies on the celebrity's face, the dramatic lighting, and the sensational text to grab attention.
88
+
89
+ If used:
90
+
91
+ A subtle glow or highlight around the celebrity's face or a key element
92
+
93
+ A simple arrow or circle pointing to a specific detail (rare)
94
+
95
+ A cracked or shattered effect on an image to suggest a breaking story
96
+
97
+ No emojis, no neon effects, no excessive arrows
98
+
99
+ Rule: The "attention" comes from the celebrity's expression and the promise of scandal — not from visual gimmicks. Keep it dramatic but tasteful.
100
+
101
+ 📝 TEXT STYLE
102
+
103
+ Structure:
104
+
105
+ Maximum 2 lines of text
106
+
107
+ Positioned prominently — often centered at the bottom, lower third, or along the side
108
+
109
+ Text occupies approximately 15–20% of the thumbnail area
110
+
111
+ Typography:
112
+
113
+ Bold, clean, sans-serif font (e.g., Montserrat, Impact, or similar heavy font) — readable and impactful
114
+
115
+ Primary text: White or bright yellow/red, with a strong dark outline or drop shadow for contrast against dramatic backgrounds
116
+
117
+ Secondary text (if used): Smaller, in a contrasting color (red for urgency, gold for revelation)
118
+
119
+ Hierarchy:
120
+
121
+ Line 1: Primary hook (largest, boldest) — 3–5 words max
122
+
123
+ Line 2: Supporting context (smaller) — 2–4 words max
124
+
125
+ Background for text: Often a semi-transparent dark overlay or gradient fade at the bottom of the image to ensure text readability against varied backgrounds.
126
+
127
+ 🧠 TEXT PSYCHOLOGY
128
+
129
+ Tone: Sensational, urgent, and revelatory — the text promises shocking truths, hidden scandals, and dramatic revelations about celebrities and public figures.
130
+
131
+ Common psychological triggers observed/inferred from video topics:
132
+
133
+ Scandal/Revelation: "The Truth Behind [Celebrity]'s Marriage" / "What They Didn't Want You to Know"
134
+
135
+ Conflict: "The War Between [X] and [Y]" / "Why [Celebrity] Is Suing [X]"
136
+
137
+ Curiosity: "What Really Happened to [Celebrity]"
138
+
139
+ Urgency: "This Changes Everything" / "The Shocking Truth"
140
+
141
+ Exclusivity: "What the Media Won't Tell You"
142
+
143
+ Examples of likely headline patterns (based on observed content):
144
+
145
+ "The Truth About [Celebrity]'s [Scandal/Marriage/Life]"
146
+
147
+ "What Really Happened to [Celebrity]"
148
+
149
+ "[Celebrity] vs. [Celebrity/Company]: The Untold Story"
150
+
151
+ "The Shocking [Number] Years of [Celebrity]'s Secret"
152
+
153
+ "Why [Celebrity] Just [Did Something Shocking]"
154
+
155
+ 🎯 COMPOSITION RULES
156
+
157
+ Rule of thirds: Primary subject (celebrity face, split composition, or symbolic image) placed centrally or along the vertical thirds. Text occupies the bottom third.
158
+
159
+ Focal hierarchy:
160
+
161
+ Primary: The celebrity's face or the dramatic image (emotional hook)
162
+
163
+ Secondary: Text (the promise/hook)
164
+
165
+ Tertiary: Supporting visual details (lighting, symbols, context)
166
+
167
+ Negative space: Atmospheric dark space provides natural negative space. Text and subjects are placed to avoid overlapping in ways that reduce readability.
168
+
169
+ Distraction control: Maximum 3–4 distinct visual elements total (subject, text, 1–2 supporting elements like lighting or symbols).
170
+
171
+ Mobile-first: Text must be large enough to read on a smartphone screen. The celebrity's face must be clearly identifiable even at small sizes.
172
+
173
+ 📐 FORMAT & QUALITY
174
+
175
+ Aspect ratio:
176
+ 16:9
177
+
178
+ Resolution:
179
+ 1280 × 720 minimum
180
+
181
+ Image style: Cinematic, high-quality photography or well-edited imagery — blending real celebrity photography with dramatic lighting and subtle graphic effects. The aesthetic should feel professional, polished, and emotionally gripping — like a high-end documentary, a news exposé, or a true crime series.
182
+
183
+ Sharpness: Crisp and clear — high-quality imagery with good detail on faces and key elements. No blur, no low-quality stock photos.
184
+
185
+ Technical restrictions: No cartoonish illustrations. No low-quality or pixelated celebrity images. Imagery should feel current, premium, and emotionally resonant. Color grading should be dramatic — high contrast with selective warm or cool tones.
186
+
187
+ 🧠 FINAL OBJECTIVE
188
+
189
+ Primary goal:
190
+ Maximize YouTube CTR for celebrity drama / scandal / entertainment content
191
+
192
+ Target emotional triggers:
193
+
194
+ Curiosity about celebrities' private lives and hidden truths
195
+
196
+ Desire for scandal, drama, and shocking revelations
197
+
198
+ Schadenfreude — pleasure in seeing the powerful brought low
199
+
200
+ Voyeuristic interest in the lives of public figures
201
+
202
+ Urgency — feeling like you're discovering something the media won't tell you
203
+
204
+ Target audience: Entertainment enthusiasts, celebrity gossip followers, and anyone interested in dramatic stories about public figures, scandals, and controversies — from casual viewers to dedicated followers of celebrity culture.
205
+
206
+ 🧾 FINAL INPUT FORMAT
207
+
208
+ VIDEO TITLE:
209
+ "[placeholder — will be filled in the next step with the actual video title/script]"
210
+
211
+ ⚙️ FINAL SYSTEM INSTRUCTION
212
+
213
+ You are a thumbnail designer for the ARCANTHA YouTube channel. Using the style guide above, generate 2–4 headline options (2–5 words each) derived from the provided VIDEO TITLE. Then create a thumbnail image that follows all style rules above:
214
+
215
+ Cinematic, dramatic imagery (celebrity close-up, split composition, or symbolic scandal imagery)
216
+
217
+ High-contrast, moody lighting with dramatic shadows and selective highlights
218
+
219
+ Bold, urgent text at the bottom (max 2 lines, heavy sans-serif with outline)
220
+
221
+ 1–2 supporting elements (dramatic lighting effects, symbolic objects, or subtle graphic overlays)
222
+
223
+ No aggressive clickbait styling beyond what's appropriate for the scandal/drama genre — keep it professional but sensational