@danhachuel/thunderbolt 0.2.86 → 0.2.87

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.
@@ -0,0 +1,13 @@
1
+ [theme]
2
+ base = "light"
3
+ primaryColor = "#35A7FF"
4
+ backgroundColor = "#FFFFFF"
5
+ secondaryBackgroundColor = "#F3F6FA"
6
+ textColor = "#16202A"
7
+ font = "sans serif"
8
+
9
+ [client]
10
+ toolbarMode = "auto"
11
+
12
+ [logger]
13
+ hideWarningOnDirectExecution = true
@@ -2,7 +2,7 @@
2
2
 
3
3
  Este manual descreve a instalação local da UI Thunderbolt, baseada no MoneyPrinterTurbo, utilizando o pacote npm `@danhachuel/thunderbolt`. O fluxo recomendado instala automaticamente o ambiente Python, as dependências da aplicação, as dependências do MoneyPrinterTurbo, o Streamlit e o suporte FFmpeg através de `imageio-ffmpeg`.
4
4
 
5
- > **Versão deste manual:** 0.2.86
5
+ > **Versão deste manual:** 0.2.87
6
6
  > **Pacote npm:** `@danhachuel/thunderbolt`
7
7
  > **Porta padrão da UI:** `localhost:3030`
8
8
  > **Repositório:** [github.com/DanHachuel/thunderbolt](https://github.com/DanHachuel/thunderbolt)
@@ -198,6 +198,10 @@ No topo da área principal, o menu nativo de idioma segue o padrão do MoneyPrin
198
198
 
199
199
  Todas as subabas internas e o conteúdo das páginas também são traduzidos nos dez idiomas. Isso inclui títulos, subtítulos, descrições, labels, placeholders, opções, botões, avisos, mensagens de sucesso/erro, estados vazios, métricas, expanderes e blocos Markdown/HTML. Valores técnicos, IDs, URLs, nomes de ficheiros e dados introduzidos pelo utilizador permanecem inalterados. As subabas internas traduzidas incluem: Blueprints/Brandings, Pesquisa pública/Cadastro manual/Contas cadastradas, Upload/Biblioteca, Importar do YouTube/Canais em lote gmail/Cadastro manual, Criar vídeo/Vídeos, Novo roteiro/letra/Histórico guardado, análise de clusters, edição de cortes, Vídeos/Código Python, as quatro opções de Upload, API Keys/Teste de vozes, Serviços e modelos/Fontes de materiais e Client MCP/Servidor MCP/Skill. A ordem e as chaves internas dos widgets permanecem estáveis.
200
200
 
201
+ ### Temas Light e Dark
202
+
203
+ A aplicação usa o mecanismo nativo de temas do Streamlit e é distribuída com `.streamlit/config.toml`, seguindo o padrão de configuração do [MoneyPrinterTurbo](https://github.com/harry0703/MoneyPrinterTurbo). O ficheiro define uma base **Light** legível; o utilizador pode seleccionar **Dark** no menu nativo do Streamlit. Os componentes próprios da UI herdam as cores do tema activo através de `currentColor` e `color-mix`, sem forçar fundos, cartões ou textos da paleta escura. O toolbar nativo, o indicador de execução, **Deploy** e o menu principal continuam sem sobreposições CSS.
204
+
201
205
  ## 4. Diagnóstico antes de iniciar
202
206
 
203
207
  Depois da instalação, execute:
package/README.md CHANGED
@@ -52,7 +52,11 @@ O Thunderbolt mantém os idiomas históricos da criação de vídeos e acrescent
52
52
 
53
53
  No topo da área principal da aplicação existe o menu nativo de idioma no padrão do MoneyPrinterTurbo, sem sobrepor o toolbar do Streamlit. O selector mostra o rótulo visível **Language** acima do campo, cada opção aparece como **nome do idioma + código**, e a bandeira é uma imagem SVG local real, não um emoji ou sigla dependente da fonte do sistema. Ao escolher outra opção, a preferência é guardada em `storage/state/settings.json` como `ui_language`, e a navegação lateral e o dashboard inicial actualizam-se sem alterar o idioma seleccionado para os vídeos. O indicador de execução, o botão **Deploy** e o menu principal do Streamlit permanecem totalmente nativos e clicáveis.
54
54
 
55
- ## Navegação da UI 0.2.86
55
+ ## Temas claro e escuro
56
+
57
+ A UI suporta os temas **Light** e **Dark** através do mecanismo nativo do Streamlit. A configuração distribuída em `.streamlit/config.toml` define uma base clara, seguindo o padrão de configuração do [MoneyPrinterTurbo](https://github.com/harry0703/MoneyPrinterTurbo), e o menu nativo continua responsável pela preferência do utilizador. O CSS próprio do Thunderbolt usa cores semânticas, `currentColor` e `color-mix` para que a sidebar, cartões, estados, radio cards, expanders e o hero de Cortes acompanhem o tema activo. As cores de identidade dos chips de plataformas e das bandeiras são intencionais e não são substituídas pelo tema.
58
+
59
+ ## Navegação da UI 0.2.87
56
60
 
57
61
  A barra lateral mantém os níveis principais, nesta ordem: **Início**, **Niche Finder**, **Pipeline**, **Pipeline TikTok**, **Automação**, **Edição**, **AI Influencers** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Roteiros** e **Upload**. **Automação** também é expansível e contém **Automação Youtube**. **Edição** é expansível e contém **Limpador de Metadados**, **Cortes**, **Editor Python** e **Download Mídia**, nessa ordem. **AI Influencers** é expansível e contém **Personagens**, **Redes Sociais**, **Tutorial Meta** e **Tutorial Supabase**, nessa ordem. **Niche Finder** é expansível e contém **Niche Finder Kaggle** e **Niche Finder Apify**. **Configurações** é expansível e contém **Canais Youtube**, **Blueprints Youtube**, **MCP**, **Contas Google**, **Configuração API** e **Notificações**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
58
62
 
package/app/main.py CHANGED
@@ -149,45 +149,50 @@ st.set_page_config(page_title="Thunderbolt", page_icon="T", layout="wide", initi
149
149
 
150
150
  st.markdown("""
151
151
  <style>
152
- :root { --accent:#35a7ff; --bg:#0b1118; --card:#121b26; }
153
- [data-testid="stAppViewContainer"] { background: radial-gradient(circle at top right, #13283b 0, #0b1118 42%); }
154
- [data-testid="stSidebar"] { background:#091018; border-right:1px solid #1d3448; }
152
+ /*
153
+ MoneyPrinterTurbo deixa a maior parte das cores a cargo do tema nativo do
154
+ Streamlit. O Thunderbolt segue o mesmo princípio: componentes próprios usam
155
+ currentColor/color-mix e nunca uma paleta escura fixa.
156
+ */
157
+ :root { --tb-accent:#35a7ff; --tb-gold:#c59b55; }
158
+ [data-testid="stAppViewContainer"] { background:transparent; color:inherit; }
159
+ [data-testid="stSidebar"] { background:color-mix(in srgb, currentColor 4%, transparent); border-right:1px solid color-mix(in srgb, currentColor 16%, transparent); }
155
160
  [data-testid="stSidebar"] .block-container { padding-top:0.28rem; padding-bottom:0.45rem; }
156
161
  [data-testid="stSidebar"] > div:first-child { padding-top:0.28rem; }
157
162
  [data-testid="stSidebar"] .tb-brand { display:flex; align-items:baseline; gap:0.42rem; margin:0 0 0.68rem 0; white-space:nowrap; }
158
- [data-testid="stSidebar"] .tb-brand-name { color:#f4f8fb; font-size:1.38rem; line-height:1.15; font-weight:750; letter-spacing:-0.02em; }
159
- [data-testid="stSidebar"] .tb-brand-version { color:#8ba6bb; font-size:0.92rem; line-height:1; font-weight:500; }
163
+ [data-testid="stSidebar"] .tb-brand-name { color:inherit; font-size:1.38rem; line-height:1.15; font-weight:750; letter-spacing:-0.02em; }
164
+ [data-testid="stSidebar"] .tb-brand-version { color:inherit; opacity:.62; font-size:0.92rem; line-height:1; font-weight:500; }
160
165
  [data-testid="stSidebar"] [data-testid="stButton"] { margin:0.025rem 0 !important; }
161
166
  [data-testid="stSidebar"] [data-testid="stButton"] button { min-height:1.72rem; height:1.72rem; justify-content:flex-start !important; text-align:left !important; padding:0.10rem 0.52rem; border-radius:7px; border:1px solid transparent; font-size:0.86rem; font-weight:550; }
162
167
  [data-testid="stSidebar"] [data-testid="stButton"] button > div { width:100% !important; justify-content:flex-start !important; text-align:left !important; }
163
168
  [data-testid="stSidebar"] [data-testid="stButton"] button [data-testid="stMarkdownContainer"] { flex:1 1 auto !important; width:100% !important; text-align:left !important; }
164
169
  [data-testid="stSidebar"] [data-testid="stButton"] p { margin:0; line-height:1; width:100%; text-align:left !important; }
165
- [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"] { background:transparent; color:#e7edf2; }
166
- [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"]:hover { background:#1c252e; border-color:#2d3944; color:#ffffff; }
167
- [data-testid="stSidebar"] [data-testid="stBaseButton-primary"] { background:#292929; color:#ffffff; border-color:#3a3a3a; }
168
- [data-testid="stSidebar"] [data-testid="stBaseButton-primary"]:hover { background:#343434; color:#ffffff; }
169
- [data-testid="stSidebar"] [data-testid="stBaseButton-primary"] span { color:#ffffff; }
170
- [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"] span { color:#e7edf2; }
170
+ [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"] { background:transparent; color:inherit; }
171
+ [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"]:hover { background:color-mix(in srgb, currentColor 8%, transparent); border-color:color-mix(in srgb, currentColor 18%, transparent); color:inherit; }
172
+ [data-testid="stSidebar"] [data-testid="stBaseButton-primary"] { background:color-mix(in srgb, currentColor 12%, transparent); color:inherit; border-color:color-mix(in srgb, currentColor 22%, transparent); }
173
+ [data-testid="stSidebar"] [data-testid="stBaseButton-primary"]:hover { background:color-mix(in srgb, currentColor 18%, transparent); color:inherit; }
174
+ [data-testid="stSidebar"] [data-testid="stBaseButton-primary"] span,
175
+ [data-testid="stSidebar"] [data-testid="stBaseButton-secondary"] span { color:inherit; }
171
176
  [data-testid="stSidebar"] [data-testid="stExpander"] { border:0 !important; background:transparent !important; margin:0.02rem 0 !important; }
172
177
  [data-testid="stSidebar"] [data-testid="stExpander"] details { border:0 !important; background:transparent !important; }
173
- [data-testid="stSidebar"] [data-testid="stExpander"] summary { min-height:1.72rem; padding:0.10rem 0.52rem !important; border-radius:7px; color:#e7edf2; font-size:0.86rem; font-weight:650; }
174
- [data-testid="stSidebar"] [data-testid="stExpander"] summary:hover { background:#1c252e; }
178
+ [data-testid="stSidebar"] [data-testid="stExpander"] summary { min-height:1.72rem; padding:0.10rem 0.52rem !important; border-radius:7px; color:inherit; font-size:0.86rem; font-weight:650; }
179
+ [data-testid="stSidebar"] [data-testid="stExpander"] summary:hover { background:color-mix(in srgb, currentColor 8%, transparent); }
175
180
  [data-testid="stSidebar"] [data-testid="stExpander"] summary p { margin:0; line-height:1; }
176
181
  [data-testid="stSidebar"] [data-testid="stExpander"] > div { padding:0 0 0 0.42rem !important; }
177
182
  [data-testid="stSidebar"] [data-testid="stExpander"] > div [data-testid="stButton"] button { padding-left:0.92rem; font-size:0.83rem; min-height:1.62rem; height:1.62rem; }
178
- .content-card { padding: 1rem 1.1rem; border:1px solid #20384d; border-radius:14px; background:rgba(18,27,38,.92); min-height:110px; }
179
- .content-label { color:#8ba6bb; font-size:.8rem; text-transform:uppercase; letter-spacing:.07em; }
180
- .content-value { color:#f4f8fb; font-size:1.8rem; font-weight:700; margin-top:.3rem; }
181
- .stage { border-left:3px solid #35a7ff; padding:.65rem .8rem; margin:.4rem 0; background:#101d2a; border-radius:8px; }
182
- .small-muted { color:#8ba6bb; font-size:.85rem; }
183
- .tb-cuts-hero { max-width:860px; margin:0 auto 1.1rem; padding:1.6rem 1.4rem 1.35rem; text-align:center; border:1px solid #263d50; border-radius:18px; background:radial-gradient(circle at 50% 0, rgba(164,126,55,.16), transparent 58%), linear-gradient(145deg, rgba(17,27,37,.98), rgba(9,15,22,.98)); box-shadow:0 18px 48px rgba(0,0,0,.18); }
184
- .tb-cuts-hero .tb-cuts-kicker { color:#c59b55; font-size:.68rem; letter-spacing:.18em; text-transform:uppercase; font-weight:700; }
185
- .tb-cuts-hero h2 { color:#f5f0e8; font-family:Georgia,serif; font-size:2rem; font-weight:500; margin:.42rem 0 .25rem; text-transform:lowercase; }
186
- .tb-cuts-hero p { color:#9cafbf; margin:0 auto; max-width:620px; font-size:.9rem; }
183
+ .content-card { padding:1rem 1.1rem; border:1px solid color-mix(in srgb, currentColor 16%, transparent); border-radius:14px; background:color-mix(in srgb, currentColor 4%, transparent); min-height:110px; }
184
+ .content-label { color:inherit; opacity:.62; font-size:.8rem; text-transform:uppercase; letter-spacing:.07em; }
185
+ .content-value { color:inherit; font-size:1.8rem; font-weight:700; margin-top:.3rem; }
186
+ .stage { border-left:3px solid var(--tb-accent); padding:.65rem .8rem; margin:.4rem 0; background:color-mix(in srgb, currentColor 4%, transparent); border-radius:8px; }
187
+ .small-muted { color:inherit; opacity:.65; font-size:.85rem; }
188
+ .tb-cuts-hero { max-width:860px; margin:0 auto 1.1rem; padding:1.6rem 1.4rem 1.35rem; text-align:center; border:1px solid color-mix(in srgb, currentColor 18%, transparent); border-radius:18px; background:radial-gradient(circle at 50% 0, color-mix(in srgb, var(--tb-gold) 16%, transparent), transparent 58%), color-mix(in srgb, currentColor 4%, transparent); box-shadow:0 18px 48px color-mix(in srgb, currentColor 12%, transparent); }
189
+ .tb-cuts-hero .tb-cuts-kicker { color:var(--tb-gold); font-size:.68rem; letter-spacing:.18em; text-transform:uppercase; font-weight:700; }
190
+ .tb-cuts-hero h2 { color:inherit; font-family:Georgia,serif; font-size:2rem; font-weight:500; margin:.42rem 0 .25rem; text-transform:lowercase; }
191
+ .tb-cuts-hero p { color:inherit; opacity:.68; margin:0 auto; max-width:620px; font-size:.9rem; }
187
192
  [data-testid="stRadio"] [role="radiogroup"] { gap:.6rem; }
188
- [data-testid="stRadio"] label { border:1px solid #2a4052; border-radius:12px; padding:.65rem .8rem; background:#101b25; min-height:4.3rem; }
189
- [data-testid="stRadio"] label:has(input:checked) { border-color:#c59b55; background:linear-gradient(145deg, rgba(96,71,33,.42), rgba(17,27,37,.95)); }
190
- [data-testid="stStatusWidget"] { border-color:#2a4052 !important; background:#101b25 !important; }
193
+ [data-testid="stRadio"] label { border:1px solid color-mix(in srgb, currentColor 18%, transparent); border-radius:12px; padding:.65rem .8rem; background:color-mix(in srgb, currentColor 4%, transparent); min-height:4.3rem; }
194
+ [data-testid="stRadio"] label:has(input:checked) { border-color:var(--tb-gold); background:linear-gradient(145deg, color-mix(in srgb, var(--tb-gold) 24%, transparent), color-mix(in srgb, currentColor 6%, transparent)); }
195
+ [data-testid="stStatusWidget"] { border-color:color-mix(in srgb, currentColor 18%, transparent) !important; background:color-mix(in srgb, currentColor 4%, transparent) !important; }
191
196
  /* O menu de idiomas usa layout nativo da aplicação; o toolbar do Streamlit não é alterado. */
192
197
 
193
198
  /* Cores dos chips por identidade da plataforma, sem depender da ordem de selecção. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.2.86",
3
+ "version": "0.2.87",
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",
@@ -25,7 +25,8 @@
25
25
  "MANUAL-INSTALACAO.md",
26
26
  "THIRD-PARTY-NOTICES.md",
27
27
  "requirements.txt",
28
- "package.json"
28
+ "package.json",
29
+ ".streamlit/config.toml"
29
30
  ],
30
31
  "scripts": {
31
32
  "start": "node scripts/cli.mjs",