@danhachuel/thunderbolt 0.2.34 → 0.2.35
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/MANUAL-INSTALACAO.md +7 -7
- package/README.md +8 -8
- package/app/main.py +19 -3
- package/package.json +1 -1
package/MANUAL-INSTALACAO.md
CHANGED
|
@@ -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.
|
|
5
|
+
> **Versão deste manual:** 0.2.35
|
|
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)
|
|
@@ -100,13 +100,13 @@ Execute:
|
|
|
100
100
|
Windows PowerShell ou MobaXterm:
|
|
101
101
|
|
|
102
102
|
```powershell
|
|
103
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
103
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.35 install
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
Linux/macOS:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
npx --yes @danhachuel/thunderbolt@0.2.
|
|
109
|
+
npx --yes @danhachuel/thunderbolt@0.2.35 install
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
A instalação normal é **segura para actualizações**: preserva `storage`, Blueprints, Brandings, configurações e artefactos do utilizador. Remove apenas `.venv`, o clone técnico do MoneyPrinterTurbo e dependências que serão recriadas. Uma pasta antiga sem dados do utilizador, como `C:\Users\<utilizador>\AppData\Local\hermes` da tentativa incompleta, pode ser removida; uma pasta antiga que contenha Blueprints, Brandings ou storage é preservada e apenas avisada no terminal. Feche processos Python, Node, Streamlit e MobaXterm que estejam a usar as pastas antes de executar.
|
|
@@ -345,7 +345,7 @@ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
|
345
345
|
|
|
346
346
|
## 8. Configuração inicial da UI
|
|
347
347
|
|
|
348
|
-
Na primeira execução, a barra lateral apresenta **Início**, **Pipeline**, **Automação**, **Niche Finder** e **Configurações**. Abra **Configurações > Configurações Técnicas** e reveja. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas**, **Upload** e **Limpador de Metadados**. O menu **Configurações** contém **Canais**, **Blueprints**, **MCP** e **Configurações Técnicas**. Para YouTube, preencha primeiro o par **OAuth Client ID + OAuth Client Secret** se pretende autorizar uploads. A **YouTube Data API Key** é uma credencial Google Cloud diferente e fica numa área opcional, apenas para o método oficial de métricas; Client ID + Client Secret não formam uma API Key.
|
|
348
|
+
Na primeira execução, a barra lateral apresenta **Início**, **Pipeline**, **Automação**, **Niche Finder** e **Configurações**. O menu expansível **Niche Finder** contém **Niche Finder Kaggle** e **Niche Finder Apify**. A aba **Niche Finder Kaggle** mantém a análise actual; **Niche Finder Apify** é uma área vazia reservada para desenvolvimento futuro. Abra **Configurações > Configurações Técnicas** e reveja. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas**, **Upload** e **Limpador de Metadados**. O menu **Configurações** contém **Canais**, **Blueprints**, **MCP** e **Configurações Técnicas**. Para YouTube, preencha primeiro o par **OAuth Client ID + OAuth Client Secret** se pretende autorizar uploads. A **YouTube Data API Key** é uma credencial Google Cloud diferente e fica numa área opcional, apenas para o método oficial de métricas; Client ID + Client Secret não formam uma API Key.
|
|
349
349
|
|
|
350
350
|
| Configuração | Finalidade |
|
|
351
351
|
|---|---|
|
|
@@ -371,7 +371,7 @@ Após iniciar a aplicação, valide o seguinte percurso:
|
|
|
371
371
|
2. **Blueprints:** coloque um JSON em `~/.thunderbolt/storage/blueprints/importados/` (Windows: `%LOCALAPPDATA%\\THUNDERBOLT\storage\blueprints\importados\`) ou use o carregador da interface.
|
|
372
372
|
3. **Brandings:** abra a subaba **Brandings** e confirme a listagem dos ficheiros JSON.
|
|
373
373
|
4. **Canais:** em **Importar do YouTube**, use o método **Página pública — sem API Key** com um URL `/channel/UC...`, um handle ou uma subpágina `/videos`; o parser resolve o ID, consulta a página pública e tenta o RSS quando necessário. Confirme que o resultado abre o formulário de revisão sem Data API Key. Se o canal não existir ou não fornecer metadados, confirme a mensagem clara e que o formulário de uma pesquisa anterior desaparece. A Data API é opcional e fica separada; em **Cadastro manual**, preencha os dados sem qualquer consulta externa.
|
|
374
|
-
5. **Niche Finder:** abra
|
|
374
|
+
5. **Niche Finder Kaggle:** abra o menu expansível **Niche Finder**, seleccione **Niche Finder Kaggle**, defina os parâmetros dentro do conteúdo principal e confirme que não há preparação automática. Antes do clique, não deve existir download de dataset nem análise. Clique em **Analisar Nichos** para iniciar a preparação dos dados e a análise; depois altere país, engagement, datas e tags e clique novamente para aplicar os novos parâmetros. Abra também **Niche Finder Apify** e confirme que a página está vazia, informativa e sem operações.
|
|
375
375
|
6. **Pipeline > Criação de Vídeos:** teste primeiro o modo **Canal específico** e depois os modos de lote.
|
|
376
376
|
7. **Criação de Vídeos > Vídeos:** verifique o estado `to_do` e os botões **Iniciar** e **Parar** dentro da subaba. Confirme também que **Criação de Músicas** mostra o mesmo fluxo com título próprio.
|
|
377
377
|
8. **Upload:** configure o OAuth Client ID e Secret, autorize primeiro o **youtube-automation-agent** na própria aba, confirme o estado **pronto para publicar**, preencha título/descrição/tags e publique um MP4 real. O botão **Autorizar fallback OAuth** existe apenas para redundância; a Data API Key, se configurada, é exclusivamente para consultas oficiais públicas e nunca substitui OAuth.
|
|
@@ -387,13 +387,13 @@ Após iniciar a aplicação, valide o seguinte percurso:
|
|
|
387
387
|
|
|
388
388
|
## Niche Finder
|
|
389
389
|
|
|
390
|
-
A página **Niche Finder** integra a lógica adaptada do projecto open source [johanfortus/Niche-Finder](https://github.com/johanfortus/Niche-Finder), cujo projecto original usa K-Means e FP-Growth sobre o dataset público [Trending Youtube Video Statistics (113 Countries)](https://www.kaggle.com/datasets/asaniczka/trending-youtube-videos-113-countries). No Thunderbolt não existe Flask, rota HTTP adicional, template HTML, JavaScript D3 ou segundo processo; toda a análise é síncrona no Streamlit.
|
|
390
|
+
A página **Niche Finder Kaggle** integra a lógica adaptada do projecto open source [johanfortus/Niche-Finder](https://github.com/johanfortus/Niche-Finder), cujo projecto original usa K-Means e FP-Growth sobre o dataset público [Trending Youtube Video Statistics (113 Countries)](https://www.kaggle.com/datasets/asaniczka/trending-youtube-videos-113-countries). No Thunderbolt não existe Flask, rota HTTP adicional, template HTML, JavaScript D3 ou segundo processo; toda a análise é síncrona no Streamlit.
|
|
391
391
|
|
|
392
392
|
Ao abrir a página, o Thunderbolt não prepara dados públicos, não descarrega o dataset e não inicia a análise. A instalação das dependências continua automática, mas a operação é manual: os parâmetros ficam dentro da própria aba e o utilizador deve clicar em **Analisar Nichos**. Só depois desse clique o KaggleHub prepara ou reutiliza a cache local; não há upload de CSV, botão de download manual ou selector de ficheiros.
|
|
393
393
|
|
|
394
394
|
Os parâmetros da UI são número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, engagement, intervalo de datas e tags, todos dentro da área principal da aba. O núcleo normaliza os dados, calcula engagement, aplica filtros, faz transformação logarítmica e standardização, executa K-Means e calcula itemsets/regras com FP-Growth. Não são apresentados resultados até ao primeiro clique em **Analisar Nichos**; o mesmo botão aplica alterações posteriores aos filtros. Os resultados são DataFrames de clusters, itemsets frequentes, regras de associação e dados analisados; o gráfico de dispersão é criado nativamente com Plotly.
|
|
395
395
|
|
|
396
|
-
As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
396
|
+
As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.35 install`; o instalador detecta e reutiliza o que já estiver válido.
|
|
397
397
|
|
|
398
398
|
## Pipeline: Criação de Vídeos, Criação de Músicas e Automação
|
|
399
399
|
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ A primeira versão implementa a camada UI independente com:
|
|
|
17
17
|
| Canais | Subabas de importação pública sem API Key, Data API opcional e cadastro manual independente |
|
|
18
18
|
| Criação de Vídeos / Criação de Músicas | Subabas Criar vídeo e Vídeos; lotes; 51 rótulos de idioma; Pexels/Pixabay, full IA com Estilo IA e Apenas Música com agente musical; a segunda página reutiliza o mesmo fluxo com título próprio |
|
|
19
19
|
| Automação | Lista de vídeos e canais, selectores editáveis de Blueprint/voz padrão, Automação ON, horário diário HH:MM e worker local baseado no relógio do computador |
|
|
20
|
-
| Niche Finder |
|
|
20
|
+
| Niche Finder | Menu expansível com Niche Finder Kaggle (análise manual, K-Means e FP-Growth) e Niche Finder Apify reservado para desenvolvimento futuro |
|
|
21
21
|
| Upload | YouTube via `youtube-automation-agent` adaptado internamente, OAuth directo de redundância, Upload directo experimental, TikTok, Instagram e Facebook Pages no front end |
|
|
22
22
|
| MCP | Catálogo local opcional de Short Video Maker, AutoVio, OpenMontage e OpenCut, com portas editáveis e activação |
|
|
23
23
|
| Limpador de Metadados | Upload isolado de vídeos terceiros, limpeza FFmpeg, edição de título/descrição/tags e manifesto JSON |
|
|
@@ -26,9 +26,9 @@ A primeira versão implementa a camada UI independente com:
|
|
|
26
26
|
|
|
27
27
|
Os adaptadores do MoneyPrinterTurbo e de publicação nas plataformas são ligados pelas configurações locais e pelos pontos de integração em `integrations/`. A UI não inventa dados quando um serviço externo ou credencial não está disponível.
|
|
28
28
|
|
|
29
|
-
## Navegação da UI 0.2.
|
|
29
|
+
## Navegação da UI 0.2.35
|
|
30
30
|
|
|
31
|
-
A barra lateral mantém
|
|
31
|
+
A barra lateral mantém os níveis principais, nesta ordem: **Início**, **Pipeline**, **Automação**, **Niche Finder** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Upload** e **Limpador de Metadados**. **Niche Finder** é expansível e contém **Niche Finder Kaggle** e **Niche Finder Apify**. **Configurações** é expansível e contém **Canais**, **Blueprints**, **MCP** e **Configurações Técnicas**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
|
|
32
32
|
|
|
33
33
|
## Instalação
|
|
34
34
|
|
|
@@ -115,9 +115,9 @@ thunderbolt
|
|
|
115
115
|
No Windows PowerShell, se `npx` for bloqueado por `npx.ps1`, use directamente `npx.cmd`:
|
|
116
116
|
|
|
117
117
|
```powershell
|
|
118
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
119
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
120
|
-
npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
118
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.35 install
|
|
119
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.35 doctor
|
|
120
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.35
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
Como alternativa, pode permitir scripts para o seu utilizador:
|
|
@@ -137,11 +137,11 @@ Após `install`, o launcher usa o ambiente virtual instalado em `~/.thunderbolt/
|
|
|
137
137
|
|
|
138
138
|
## Niche Finder
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
O menu expansível **Niche Finder** contém duas páginas. **Niche Finder Kaggle** é a página actual de análise e integra a lógica do projecto open source [johanfortus/Niche-Finder](https://github.com/johanfortus/Niche-Finder) directamente no processo Streamlit. O Thunderbolt não inicia Flask, não abre uma porta adicional e não copia templates HTML ou D3. Ao abrir a página, o Thunderbolt não descarrega dados, não prepara o dataset e não executa análises. A instalação das dependências continua automática, mas a operação é manual: o utilizador define os parâmetros dentro da própria aba e clica em **Analisar Nichos**. Só nesse momento o KaggleHub prepara ou reutiliza a cache local do dataset e a análise é executada.
|
|
141
141
|
|
|
142
142
|
A interface apresenta dentro da aba os parâmetros da busca: número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, categoria de engagement, intervalo de datas e tags. A página permanece sem resultados até o primeiro clique em **Analisar Nichos**; depois, se os parâmetros forem alterados, mostra os resultados anteriores e pede novo clique para aplicar os filtros actuais. O núcleo aplica normalização, filtros, `log1p`, `StandardScaler`, K-Means e FP-Growth. Os resultados aparecem em DataFrames para clusters, itemsets frequentes, regras de associação e dados analisados, acompanhados por uma visualização Plotly nativa e pesquisa de palavras nos clusters.
|
|
143
143
|
|
|
144
|
-
As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.
|
|
144
|
+
**Niche Finder Apify** é uma página vazia reservada para a futura integração com o Apify e não executa nenhuma operação. As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.35 install`; o instalador detecta e reutiliza componentes já válidos.
|
|
145
145
|
|
|
146
146
|
## Armazenamento local
|
|
147
147
|
|
package/app/main.py
CHANGED
|
@@ -637,7 +637,7 @@ def _cached_niche_download():
|
|
|
637
637
|
|
|
638
638
|
|
|
639
639
|
def render_niche_finder():
|
|
640
|
-
st.title("Niche Finder")
|
|
640
|
+
st.title("Niche Finder Kaggle")
|
|
641
641
|
st.caption("Busca de padrões, nichos e tags para orientar canais faceless.")
|
|
642
642
|
st.info("A instalação das dependências é automática. A operação não é: defina os parâmetros abaixo e clique em **Analisar Nichos** para iniciar.")
|
|
643
643
|
|
|
@@ -743,6 +743,12 @@ def render_niche_finder():
|
|
|
743
743
|
st.dataframe(results["raw_data"], use_container_width=True, hide_index=True)
|
|
744
744
|
|
|
745
745
|
|
|
746
|
+
def render_niche_finder_apify():
|
|
747
|
+
st.title("Niche Finder Apify")
|
|
748
|
+
st.caption("Área reservada para a futura integração do Niche Finder com o Apify.")
|
|
749
|
+
st.info("Esta aba está preparada para desenvolvimento futuro e ainda não executa nenhuma operação.")
|
|
750
|
+
|
|
751
|
+
|
|
746
752
|
def render_videos():
|
|
747
753
|
st.subheader("Vídeos e backlog")
|
|
748
754
|
st.caption("Acompanhamento dos vídeos criados, estados da pipeline e controlos de execução.")
|
|
@@ -1498,6 +1504,10 @@ def main():
|
|
|
1498
1504
|
("MCP", ":material/hub:", "MCP"),
|
|
1499
1505
|
("Configurações Técnicas", ":material/settings:", "Configurações Técnicas"),
|
|
1500
1506
|
]
|
|
1507
|
+
niche_finder_items = [
|
|
1508
|
+
("Niche Finder Kaggle", ":material/search:", "Niche Finder Kaggle"),
|
|
1509
|
+
("Niche Finder Apify", ":material/api:", "Niche Finder Apify"),
|
|
1510
|
+
]
|
|
1501
1511
|
top_pages = [
|
|
1502
1512
|
("Início", ":material/home:", "Início"),
|
|
1503
1513
|
("Pipeline", ":material/account_tree:", "Pipeline"),
|
|
@@ -1510,10 +1520,11 @@ def main():
|
|
|
1510
1520
|
"Novo vídeo": "Criação de Vídeos",
|
|
1511
1521
|
"Vídeos": "Criação de Vídeos",
|
|
1512
1522
|
"Limpador de metadado": "Limpador de Metadados",
|
|
1523
|
+
"Niche Finder": "Niche Finder Kaggle",
|
|
1513
1524
|
"Configurações Técnicas": "Configurações Técnicas",
|
|
1514
1525
|
}
|
|
1515
1526
|
current_page = aliases.get(st.session_state.get("page", "Início"), st.session_state.get("page", "Início"))
|
|
1516
|
-
if current_page not in {item[0] for item in top_pages + pipeline_items + settings_items}:
|
|
1527
|
+
if current_page not in {item[0] for item in top_pages + pipeline_items + niche_finder_items + settings_items}:
|
|
1517
1528
|
current_page = "Início"
|
|
1518
1529
|
st.session_state["page"] = current_page
|
|
1519
1530
|
|
|
@@ -1533,6 +1544,10 @@ def main():
|
|
|
1533
1544
|
with st.expander("Pipeline", expanded=current_page in {item[0] for item in pipeline_items}, icon=":material/account_tree:"):
|
|
1534
1545
|
for child_target, child_icon, child_label in pipeline_items:
|
|
1535
1546
|
render_nav_button(child_target, child_icon, child_label, child=True)
|
|
1547
|
+
elif target == "Niche Finder":
|
|
1548
|
+
with st.expander("Niche Finder", expanded=current_page in {item[0] for item in niche_finder_items}, icon=":material/search:"):
|
|
1549
|
+
for child_target, child_icon, child_label in niche_finder_items:
|
|
1550
|
+
render_nav_button(child_target, child_icon, child_label, child=True)
|
|
1536
1551
|
elif target == "Configurações":
|
|
1537
1552
|
with st.expander("Configurações", expanded=current_page in {item[0] for item in settings_items}, icon=":material/settings:"):
|
|
1538
1553
|
for child_target, child_icon, child_label in settings_items:
|
|
@@ -1545,7 +1560,8 @@ def main():
|
|
|
1545
1560
|
"Criação de Vídeos": render_new_video,
|
|
1546
1561
|
"Criação de Músicas": render_music_creation,
|
|
1547
1562
|
"Automação": render_automation,
|
|
1548
|
-
"Niche Finder": render_niche_finder,
|
|
1563
|
+
"Niche Finder Kaggle": render_niche_finder,
|
|
1564
|
+
"Niche Finder Apify": render_niche_finder_apify,
|
|
1549
1565
|
"Upload": render_upload,
|
|
1550
1566
|
"Limpador de Metadados": render_metadata_cleaner,
|
|
1551
1567
|
"Canais": render_channels,
|
package/package.json
CHANGED