@danhachuel/thunderbolt 0.4.21 → 0.4.22
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/hermes_ui/storage.py
CHANGED
|
@@ -21,6 +21,7 @@ TIKTOK_PROMPT_MASTERS = STORAGE / "tiktok" / "prompts_master"
|
|
|
21
21
|
MEDIA_DOWNLOADS = STORAGE / "downloads"
|
|
22
22
|
NICHES_DATA = STORAGE / "data" / "niches"
|
|
23
23
|
SEED_BLUEPRINTS = ROOT / "seed" / "blueprints"
|
|
24
|
+
SEED_THUMBNAIL_BLUEPRINTS = SEED_BLUEPRINTS / "thumbnails"
|
|
24
25
|
SEED_TIKTOK_PROMPT_MASTERS = ROOT / "seed" / "prompt_masters"
|
|
25
26
|
|
|
26
27
|
DEFAULTS: dict[str, Any] = {
|
|
@@ -359,6 +360,16 @@ def seed_blueprints() -> None:
|
|
|
359
360
|
target = destination / source.name
|
|
360
361
|
if not target.exists():
|
|
361
362
|
shutil.copy2(source, target)
|
|
363
|
+
thumbnail_destination = BLUEPRINTS / "thumbnails"
|
|
364
|
+
thumbnail_destination.mkdir(parents=True, exist_ok=True)
|
|
365
|
+
for source in sorted(SEED_THUMBNAIL_BLUEPRINTS.glob("*.md")):
|
|
366
|
+
target = thumbnail_destination / source.name
|
|
367
|
+
if not target.exists():
|
|
368
|
+
shutil.copy2(source, target)
|
|
369
|
+
pair_source = SEED_BLUEPRINTS / "thumbnail_blueprint_pairs.json"
|
|
370
|
+
pair_target = BLUEPRINTS / "thumbnail_blueprint_pairs.json"
|
|
371
|
+
if pair_source.exists() and not pair_target.exists():
|
|
372
|
+
shutil.copy2(pair_source, pair_target)
|
|
362
373
|
|
|
363
374
|
|
|
364
375
|
def seed_prompt_masters() -> None:
|
|
@@ -400,7 +411,7 @@ def _migrate_settings(settings: Any) -> tuple[dict[str, Any], bool]:
|
|
|
400
411
|
|
|
401
412
|
|
|
402
413
|
def ensure_storage() -> None:
|
|
403
|
-
for path in [STATE, BLUEPRINTS / "canais", BLUEPRINTS / "nichos", BLUEPRINTS / "importados", BLUEPRINTS / "brandings", TIKTOK_PROMPT_MASTERS, MEDIA_DOWNLOADS, STORAGE / "brand", STORAGE / "scripts", STORAGE / "thumbnails", STORAGE / "videos", STORAGE / "artifacts", STORAGE / "python_editor", STORAGE / "influencers", STORAGE / "metadata_cleaner", STORAGE / "metadata_cleaner" / "outputs", STORAGE / "music", STORAGE / "voice_previews", STORAGE / "python_editor", NICHES_DATA]:
|
|
414
|
+
for path in [STATE, BLUEPRINTS / "canais", BLUEPRINTS / "nichos", BLUEPRINTS / "importados", BLUEPRINTS / "brandings", BLUEPRINTS / "thumbnails", TIKTOK_PROMPT_MASTERS, MEDIA_DOWNLOADS, STORAGE / "brand", STORAGE / "scripts", STORAGE / "thumbnails", STORAGE / "videos", STORAGE / "artifacts", STORAGE / "python_editor", STORAGE / "influencers", STORAGE / "metadata_cleaner", STORAGE / "metadata_cleaner" / "outputs", STORAGE / "music", STORAGE / "voice_previews", STORAGE / "python_editor", NICHES_DATA]:
|
|
404
415
|
path.mkdir(parents=True, exist_ok=True)
|
|
405
416
|
seed_blueprints()
|
|
406
417
|
seed_prompt_masters()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danhachuel/thunderbolt",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
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",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"scripts/*.mjs",
|
|
19
19
|
"seed/prompt_masters/**/*.md",
|
|
20
20
|
"seed/blueprints/**/*.json",
|
|
21
|
+
"seed/blueprints/**/*.md",
|
|
21
22
|
"seed/skills/*.md",
|
|
22
23
|
"seed/skills/*.py",
|
|
23
24
|
"seed/references/*.md",
|
package/scripts/cli.mjs
CHANGED
|
@@ -75,6 +75,7 @@ function ensureRuntimeStorage() {
|
|
|
75
75
|
join(storageRoot, "blueprints", "nichos"),
|
|
76
76
|
join(storageRoot, "blueprints", "importados"),
|
|
77
77
|
join(storageRoot, "blueprints", "brandings"),
|
|
78
|
+
join(storageRoot, "blueprints", "thumbnails"),
|
|
78
79
|
join(storageRoot, "metadata_cleaner"),
|
|
79
80
|
join(storageRoot, "metadata_cleaner", "originals"),
|
|
80
81
|
join(storageRoot, "metadata_cleaner", "outputs"),
|
|
@@ -93,6 +94,19 @@ function ensureRuntimeStorage() {
|
|
|
93
94
|
const target = join(destination, filename);
|
|
94
95
|
if (!existsSync(target)) copyFileSync(join(seedRoot, filename), target);
|
|
95
96
|
}
|
|
97
|
+
const thumbnailSeedRoot = join(seedRoot, "thumbnails");
|
|
98
|
+
const thumbnailDestination = join(storageRoot, "blueprints", "thumbnails");
|
|
99
|
+
if (existsSync(thumbnailSeedRoot)) {
|
|
100
|
+
for (const filename of readdirSync(thumbnailSeedRoot)) {
|
|
101
|
+
if (filename.endsWith(".md")) {
|
|
102
|
+
const target = join(thumbnailDestination, filename);
|
|
103
|
+
if (!existsSync(target)) copyFileSync(join(thumbnailSeedRoot, filename), target);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const pairSeed = join(seedRoot, "thumbnail_blueprint_pairs.json");
|
|
108
|
+
const pairTarget = join(storageRoot, "blueprints", "thumbnail_blueprint_pairs.json");
|
|
109
|
+
if (existsSync(pairSeed) && !existsSync(pairTarget)) copyFileSync(pairSeed, pairTarget);
|
|
96
110
|
}
|
|
97
111
|
}
|
|
98
112
|
|
package/scripts/install.mjs
CHANGED
|
@@ -103,6 +103,7 @@ function ensureDirs() {
|
|
|
103
103
|
join(storageRoot, "blueprints", "nichos"),
|
|
104
104
|
join(storageRoot, "blueprints", "importados"),
|
|
105
105
|
join(storageRoot, "blueprints", "brandings"),
|
|
106
|
+
join(storageRoot, "blueprints", "thumbnails"),
|
|
106
107
|
join(storageRoot, "tiktok"),
|
|
107
108
|
join(storageRoot, "tiktok", "prompts_master"),
|
|
108
109
|
join(storageRoot, "metadata_cleaner"),
|
|
@@ -130,6 +131,19 @@ function copySeedBlueprints(storageRoot) {
|
|
|
130
131
|
const target = join(destination, filename);
|
|
131
132
|
if (!existsSync(target)) copyFileSync(source, target);
|
|
132
133
|
}
|
|
134
|
+
const thumbnailSeedRoot = join(seedRoot, "thumbnails");
|
|
135
|
+
const thumbnailDestination = join(storageRoot, "blueprints", "thumbnails");
|
|
136
|
+
if (existsSync(thumbnailSeedRoot)) {
|
|
137
|
+
for (const thumbnailFilename of readdirSync(thumbnailSeedRoot)) {
|
|
138
|
+
if (!thumbnailFilename.endsWith(".md")) continue;
|
|
139
|
+
const source = join(thumbnailSeedRoot, thumbnailFilename);
|
|
140
|
+
const target = join(thumbnailDestination, thumbnailFilename);
|
|
141
|
+
if (!existsSync(target)) copyFileSync(source, target);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const pairSource = join(seedRoot, "thumbnail_blueprint_pairs.json");
|
|
145
|
+
const pairTarget = join(storageRoot, "blueprints", "thumbnail_blueprint_pairs.json");
|
|
146
|
+
if (existsSync(pairSource) && !existsSync(pairTarget)) copyFileSync(pairSource, pairTarget);
|
|
133
147
|
}
|
|
134
148
|
|
|
135
149
|
function copySeedPromptMasters(storageRoot) {
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
🔒 STYLE LOCK — NON-NEGOTIABLE
|
|
2
|
+
|
|
3
|
+
*Ultra-dramatic military breaking-news YouTube thumbnail style used by naval defense news channels.
|
|
4
|
+
Photorealistic war imagery featuring modern naval combat scenarios, explosions, missiles, submarines, fighter jets, and warships.
|
|
5
|
+
|
|
6
|
+
The tone is urgent, dramatic, geopolitical crisis, resembling a live military emergency broadcast.
|
|
7
|
+
The visual language must replicate:
|
|
8
|
+
|
|
9
|
+
Breaking news urgency
|
|
10
|
+
High contrast war photography
|
|
11
|
+
Clear geopolitical symbolism using national flags
|
|
12
|
+
Explosions, smoke, missiles, and large red arrows highlighting action
|
|
13
|
+
News-style banner occupying the bottom of the frame
|
|
14
|
+
The style must feel like a shocking military incident that just happened seconds ago.
|
|
15
|
+
|
|
16
|
+
❌ No stylized illustration
|
|
17
|
+
❌ No cartoon elements
|
|
18
|
+
❌ No minimalism
|
|
19
|
+
❌ No soft colors
|
|
20
|
+
❌ No alternate layout structures
|
|
21
|
+
|
|
22
|
+
The system must replicate the exact visual storytelling structure of the reference.
|
|
23
|
+
🧍♂️ FRAMING & POSE
|
|
24
|
+
|
|
25
|
+
Primary subject: large military hardware
|
|
26
|
+
|
|
27
|
+
*Examples:
|
|
28
|
+
Warships
|
|
29
|
+
Missile launches
|
|
30
|
+
Submarines
|
|
31
|
+
Fighter jets
|
|
32
|
+
Naval fleets
|
|
33
|
+
Explosions on ships
|
|
34
|
+
|
|
35
|
+
*Framing rules:
|
|
36
|
+
Main military object center-left or center frame
|
|
37
|
+
Secondary object in background distance
|
|
38
|
+
Action element (missile / explosion / aircraft) top-right or mid-air
|
|
39
|
+
|
|
40
|
+
*Camera angle:
|
|
41
|
+
Cinematic telephoto military photography
|
|
42
|
+
Slightly low or horizon-level perspective
|
|
43
|
+
Ocean horizon visible
|
|
44
|
+
Subjects large and clear
|
|
45
|
+
|
|
46
|
+
*Cropping:
|
|
47
|
+
Military assets must dominate the frame
|
|
48
|
+
Avoid excessive sky
|
|
49
|
+
Ensure action area is visible
|
|
50
|
+
|
|
51
|
+
*Energy:
|
|
52
|
+
Active combat moment
|
|
53
|
+
Missile firing
|
|
54
|
+
Explosion mid-blast
|
|
55
|
+
Smoke rising
|
|
56
|
+
Jets flying overhead
|
|
57
|
+
|
|
58
|
+
🎨 BACKGROUND & LIGHTING
|
|
59
|
+
*Background environment:
|
|
60
|
+
Open ocean battlefield
|
|
61
|
+
Arctic sea
|
|
62
|
+
Cold war naval environment
|
|
63
|
+
Overcast sky or cold blue daylight
|
|
64
|
+
|
|
65
|
+
*Lighting:
|
|
66
|
+
Natural daylight or cold military lighting
|
|
67
|
+
High contrast
|
|
68
|
+
Realistic shadows
|
|
69
|
+
|
|
70
|
+
*Effects required:
|
|
71
|
+
Thick black smoke
|
|
72
|
+
Bright orange explosions
|
|
73
|
+
Missile exhaust flames
|
|
74
|
+
Water splash or waves
|
|
75
|
+
|
|
76
|
+
*Depth:
|
|
77
|
+
Strong atmospheric depth
|
|
78
|
+
Background ships slightly blurred
|
|
79
|
+
|
|
80
|
+
*Visual noise:
|
|
81
|
+
Moderate realism
|
|
82
|
+
Military hardware details must remain sharp
|
|
83
|
+
|
|
84
|
+
🧭 GEOPOLITICAL SYMBOLS
|
|
85
|
+
*Flags used as identifiers:
|
|
86
|
+
National flags placed above ships or aircraft
|
|
87
|
+
Small but clearly visible
|
|
88
|
+
Floating overlay style
|
|
89
|
+
|
|
90
|
+
*Purpose:
|
|
91
|
+
Instantly communicate international conflict
|
|
92
|
+
|
|
93
|
+
*Typical combinations:
|
|
94
|
+
NATO vs Russia
|
|
95
|
+
Western fleets vs adversary forces
|
|
96
|
+
|
|
97
|
+
🚨 VISUAL ATTENTION ELEMENT
|
|
98
|
+
Large red arrow pointing to the key action moment.
|
|
99
|
+
|
|
100
|
+
*Arrow rules:
|
|
101
|
+
Bright red
|
|
102
|
+
Thick outline
|
|
103
|
+
Positioned top-right or top-center
|
|
104
|
+
Pointing directly at explosion, missile, aircraft, or submarine
|
|
105
|
+
Immediate viewer focus
|
|
106
|
+
Mobile screen clarity
|
|
107
|
+
|
|
108
|
+
📝 TEXT STYLE
|
|
109
|
+
Text is placed in a large news banner at the bottom of the thumbnail.
|
|
110
|
+
|
|
111
|
+
*Structure:
|
|
112
|
+
|
|
113
|
+
*Top strip:
|
|
114
|
+
BREAKING NEWS
|
|
115
|
+
|
|
116
|
+
*Main headline:
|
|
117
|
+
2–4 WORDS MAX
|
|
118
|
+
JUST HAPPENED
|
|
119
|
+
1 MINUTE AGO
|
|
120
|
+
THEY ATTACKED
|
|
121
|
+
WAR BEGINS
|
|
122
|
+
SHIP DESTROYED
|
|
123
|
+
|
|
124
|
+
*Bottom strip:
|
|
125
|
+
URGENT ALERT
|
|
126
|
+
|
|
127
|
+
*Typography:
|
|
128
|
+
Bold condensed sans-serif
|
|
129
|
+
Extremely heavy weight
|
|
130
|
+
All caps
|
|
131
|
+
|
|
132
|
+
*Color hierarchy:
|
|
133
|
+
*Top strip:
|
|
134
|
+
Red background
|
|
135
|
+
White text
|
|
136
|
+
|
|
137
|
+
*Main headline:
|
|
138
|
+
Bright yellow background
|
|
139
|
+
Black text
|
|
140
|
+
Text must occupy bottom 30–35% of the thumbnail.
|
|
141
|
+
|
|
142
|
+
🧠 TEXT PSYCHOLOGY
|
|
143
|
+
*The headline must trigger:
|
|
144
|
+
Urgency
|
|
145
|
+
Breaking news shock
|
|
146
|
+
Military escalation
|
|
147
|
+
Fear of global conflict
|
|
148
|
+
Immediate curiosity
|
|
149
|
+
|
|
150
|
+
*Psychological triggers:
|
|
151
|
+
“Just happened”
|
|
152
|
+
“Minutes ago”
|
|
153
|
+
“Attack”
|
|
154
|
+
“War”
|
|
155
|
+
“Emergency”
|
|
156
|
+
|
|
157
|
+
*Goal:
|
|
158
|
+
Viewer must feel they are seeing breaking world news right now.
|
|
159
|
+
|
|
160
|
+
🎯 COMPOSITION RULES
|
|
161
|
+
*Rule of thirds:
|
|
162
|
+
Main military subject center-left
|
|
163
|
+
Action element top-right
|
|
164
|
+
|
|
165
|
+
*Focal hierarchy:
|
|
166
|
+
Explosion / missile / aircraft
|
|
167
|
+
Warship or submarine
|
|
168
|
+
Red arrow
|
|
169
|
+
Headline text
|
|
170
|
+
|
|
171
|
+
*Negative space:
|
|
172
|
+
Sky area used to highlight arrows or aircraft
|
|
173
|
+
|
|
174
|
+
*Distraction control:
|
|
175
|
+
No cluttered UI elements
|
|
176
|
+
Only essential military imagery
|
|
177
|
+
|
|
178
|
+
*Mobile-first design:
|
|
179
|
+
All key elements readable at small mobile sizes
|
|
180
|
+
Text extremely large
|
|
181
|
+
High color contrast
|
|
182
|
+
|
|
183
|
+
📐 FORMAT & QUALITY
|
|
184
|
+
|
|
185
|
+
*Aspect ratio:
|
|
186
|
+
16:9
|
|
187
|
+
|
|
188
|
+
*Resolution:
|
|
189
|
+
1280 × 720 minimum
|
|
190
|
+
|
|
191
|
+
*Image style:
|
|
192
|
+
Hyper-realistic military photography
|
|
193
|
+
High detail naval equipment
|
|
194
|
+
|
|
195
|
+
*Sharpness:
|
|
196
|
+
Military hardware extremely crisp
|
|
197
|
+
Explosion glow vivid
|
|
198
|
+
|
|
199
|
+
*Restrictions:
|
|
200
|
+
❌ No stock-photo watermarks
|
|
201
|
+
❌ No blurry subjects
|
|
202
|
+
❌ No flat lighting
|
|
203
|
+
❌ No modern graphic design layouts
|
|
204
|
+
|
|
205
|
+
🧠 FINAL OBJECTIVE
|
|
206
|
+
|
|
207
|
+
*Primary goal:
|
|
208
|
+
Maximize YouTube CTR for geopolitical military content.
|
|
209
|
+
|
|
210
|
+
*Emotional triggers:
|
|
211
|
+
Shock
|
|
212
|
+
Fear
|
|
213
|
+
Curiosity
|
|
214
|
+
Global conflict intrigue
|
|
215
|
+
|
|
216
|
+
*Audience:
|
|
217
|
+
Military enthusiasts
|
|
218
|
+
Geopolitical news viewers
|
|
219
|
+
Defense technology audiences
|
|
220
|
+
The thumbnail must instantly communicate:
|
|
221
|
+
“A major military incident just happened.”
|
|
222
|
+
|
|
223
|
+
🧾 FINAL INPUT FORMAT
|
|
224
|
+
|
|
225
|
+
*VIDEO TITLE:
|
|
226
|
+
“China's SECRET Kill Chain TARGETS US Carrier — America's 22-Minute Response Left Beijing SPEECHLESS”
|
|
227
|
+
|
|
228
|
+
⚙️ FINAL SYSTEM INSTRUCTION
|
|
229
|
+
|
|
230
|
+
*Using the locked style above, generate a photorealistic military breaking-news thumbnail featuring:
|
|
231
|
+
Modern naval combat scene
|
|
232
|
+
Warships or submarines
|
|
233
|
+
Missiles or explosions
|
|
234
|
+
National flags indicating opposing forces
|
|
235
|
+
Large red arrow highlighting the key moment
|
|
236
|
+
Ocean battlefield environment
|
|
237
|
+
|
|
238
|
+
Auto-generate 2–4 word breaking news headline text and place it in the yellow center banner, maintaining the full BREAKING NEWS / URGENT ALERT news-bar structure.
|
|
239
|
+
|
|
240
|
+
Output must be a ready-to-upload 16:9 YouTube thumbnail replicating the reference style exactly. WITHOUT LOGO
|
|
241
|
+
|