@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 +24 -2
- package/hermes_ui/elevenlabs_voices.py +6 -0
- package/hermes_ui/music.py +35 -1
- package/package.json +1 -1
- package/seed/blueprints/thumbnails/ANIMAIS_Thumbnail_Blueprint.md +221 -0
- package/seed/blueprints/thumbnails/CELEBRIDADES_Thumbnail_Blueprint.md +223 -0
- package/seed/blueprints/thumbnails/COCOMELON_Thumbnail_Blueprint.md +221 -0
- package/seed/blueprints/thumbnails/HISTORIA_Thumbnail_Blueprint.md +219 -0
- package/seed/blueprints/thumbnails/Lia&Chacha_Thumbnail_Blueprint.md +182 -0
- package/seed/blueprints/thumbnails/MECANICA_Thumbnail_Blueprint.md +225 -0
- package/seed/blueprints/thumbnails/NATUREZA_Thumbnail_Blueprint.md +225 -0
- package/seed/blueprints/thumbnails/ORACAO_Thumbnail_Blueprint.md +231 -0
- package/seed/blueprints/thumbnails/STICKMAN_Thumbnail_Blueprint.md +221 -0
- package/seed/blueprints/thumbnails/STOICISMO_Thumbnail_Blueprint.md +231 -0
- package/seed/blueprints/thumbnails/Thumbnail system prompt.md +98 -0
- package/seed/blueprints/thumbnails/UNIVERSO_Thumbnail_Blueprint.md +211 -0
- package/seed/blueprints/thumbnails/ZACKDF_Thumbnail_Blueprint.md +227 -0
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)]
|
package/hermes_ui/music.py
CHANGED
|
@@ -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
|
@@ -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
|