@danhachuel/thunderbolt 0.2.36 → 0.2.38
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 +14 -6
- package/README.md +8 -7
- package/app/main.py +32 -2
- 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.38
|
|
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.38 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.38 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**. 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 do dataset Kaggle; **Niche Finder Apify** é uma segunda alternativa independente, com actor, dataset, parâmetros, credencial, execução e resultados próprios. Abra **Configurações > Configurações Técnicas** e reveja. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas
|
|
348
|
+
Na primeira execução, a barra lateral apresenta **Início**, **Pipeline**, **Automação**, **Edição**, **Models AI**, **Niche Finder** e **Configurações**. O menu expansível **Edição** contém **Limpador de Metadados**, **Cortes** e **Editor Python**. O menu expansível **Models AI** contém **Personagens** e **Redes Sociais**, nessa ordem; ambas estão reservadas para desenvolvimento futuro e não executam operaçõ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 do dataset Kaggle; **Niche Finder Apify** é uma segunda alternativa independente, com actor, dataset, parâmetros, credencial, execução e resultados próprios. Abra **Configurações > Configurações Técnicas** e reveja. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas** e **Upload**. 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
|
|---|---|
|
|
@@ -378,7 +378,7 @@ Após iniciar a aplicação, valide o seguinte percurso:
|
|
|
378
378
|
6. **Pipeline > Criação de Vídeos:** teste primeiro o modo **Canal específico** e depois os modos de lote.
|
|
379
379
|
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.
|
|
380
380
|
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.
|
|
381
|
-
9. **
|
|
381
|
+
9. **Edição > Limpador de Metadados:** suba um vídeo de terceiro, preencha título, preview, links, timestamps e tags, aplique a limpeza e descarregue a cópia limpa e o manifesto JSON. O original fica preservado e vídeos das páginas de criação não são aceites nesta área.
|
|
382
382
|
10. **Configurações > Configurações Técnicas:** confirme que os caminhos e credenciais estão locais e não aparecem no Git.
|
|
383
383
|
11. **Criação de Vídeos:** confirme que `Pexels/Pixabay` substitui o label antigo, que `Estilo IA` aparece apenas em `full_ia` e que `Apenas Música` exige áudio e guarda `background_mode=none`.
|
|
384
384
|
12. **Automação:** no cartão de cada canal, escolha o **Blueprint padrão** e a **Voz padrão**, clique em `Guardar` e confirme que o resumo do cartão se actualiza. Configure também **Automação ON** e um horário `HH:MM`; confirme a lista de vídeos cadastrados. Os mesmos defaults aparecem em **Canais** e são usados em novas tarefas. Inicie o Thunderbolt pelo launcher, confirme o aviso verde **Worker activo** e verifique que o relógio apresentado corresponde ao computador. O worker cria no máximo um lote por canal por dia quando o horário local coincide.
|
|
@@ -396,12 +396,20 @@ Ao abrir a página, o Thunderbolt não prepara dados públicos, não descarrega
|
|
|
396
396
|
|
|
397
397
|
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.
|
|
398
398
|
|
|
399
|
-
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.
|
|
399
|
+
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.38 install`; o instalador detecta e reutiliza o que já estiver válido.
|
|
400
400
|
|
|
401
401
|
### Niche Finder Apify
|
|
402
402
|
|
|
403
403
|
A alternativa Apify não usa o dataset, parâmetros, execução ou estado da alternativa Kaggle. Configure o **Apify API Token**, o **Apify Actor ID**, o intervalo de consulta e o limite da execução em **Configurações Técnicas**. Na aba, informe até três palavras-chave, período, máximo de resultados, Shorts, duração, idioma das legendas, ordenação e filtros de legendas. O botão **Pesquisar no Apify** inicia manualmente o actor `streamers~youtube-scraper`, consulta o estado do run, carrega o dataset, normaliza os vídeos, limpa SRT, calcula VSC Ratio, tenta resumir transcrições através do LLM configurado e disponibiliza resultados JSON/CSV. O histórico resumido é guardado em `storage/state/niche_apify_runs.json`; não há gravação automática no Airtable do workflow anexado.
|
|
404
404
|
|
|
405
|
+
## Models AI: Personagens e Redes Sociais
|
|
406
|
+
|
|
407
|
+
O menu **Models AI** foi adicionado abaixo de **Edição**. As abas **Personagens** e **Redes Sociais** aparecem na ordem solicitada e mostram apenas uma mensagem de reserva para desenvolvimento futuro; não executam operações nem alteram a pipeline.
|
|
408
|
+
|
|
409
|
+
## Edição: Limpador de Metadados, Cortes e Editor Python
|
|
410
|
+
|
|
411
|
+
A aba **Limpador de Metadados** continua funcional e foi movida para **Edição**. As abas **Cortes** e **Editor Python** estão visíveis na mesma ordem e mostram apenas uma mensagem de reserva para desenvolvimento futuro; não executam operações.
|
|
412
|
+
|
|
405
413
|
## Pipeline: Criação de Vídeos, Criação de Músicas e Automação
|
|
406
414
|
|
|
407
415
|
O modo `Pexels/Pixabay` representa materiais de stock. Ao seleccionar `full_ia`, o selector `Estilo IA` apresenta os 12 estilos disponíveis. Ao seleccionar `Apenas Música`, a UI obriga a escolher uma música existente, carregar um ficheiro ou solicitar uma música a um endpoint Suno configurado. O vídeo recebe `background_mode=none`, sem fundo Pexels/Pixabay ou IA.
|
package/README.md
CHANGED
|
@@ -11,24 +11,25 @@ A primeira versão implementa a camada UI independente com:
|
|
|
11
11
|
| Área | Incluído |
|
|
12
12
|
|---|---|
|
|
13
13
|
| Início | Resumo de canais, tarefas, backlog, execução e falhas, com as filas do Pipeline inline |
|
|
14
|
-
| Pipeline | Menu expansível com Criação de Vídeos, Criação de Músicas
|
|
14
|
+
| Pipeline | Menu expansível com Criação de Vídeos, Criação de Músicas e Upload |
|
|
15
15
|
| Blueprints | Leitura da pasta `storage/blueprints/`, upload/validação de JSON e criação a partir de link YouTube |
|
|
16
16
|
| Brandings | Subaba própria dentro de Blueprints, upload/listagem de Brandings e criação conjunta com Blueprint |
|
|
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
|
+
| Models AI | Menu expansível com Personagens e Redes Sociais reservados para desenvolvimento futuro |
|
|
20
21
|
| Niche Finder | Menu expansível com duas alternativas independentes: Niche Finder Kaggle e Niche Finder Apify, com parâmetros, execução e resultados separados |
|
|
22
|
+
| Edição | Menu expansível abaixo de Automação com Limpador de Metadados funcional, Cortes reservado e Editor Python reservado |
|
|
21
23
|
| 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
24
|
| MCP | Catálogo local opcional de Short Video Maker, AutoVio, OpenMontage e OpenCut, com portas editáveis e activação |
|
|
23
|
-
| Limpador de Metadados | Upload isolado de vídeos terceiros, limpeza FFmpeg, edição de título/descrição/tags e manifesto JSON |
|
|
24
25
|
| Configurações Técnicas | Provedores LLM, TTS/voz, preview de vozes, Suno, materiais, Whisper, FFmpeg, OAuth YouTube, Data API Key opcional, Kaggle Username/API Key, Apify API Token/Actor ID/limites, Upload directo, TikTok Client ID/Secret e Upload-Post |
|
|
25
26
|
| Launcher | Execução via `npx`, instalação assistida, diagnóstico e preparação para distribuição |
|
|
26
27
|
|
|
27
28
|
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
29
|
|
|
29
|
-
## Navegação da UI 0.2.
|
|
30
|
+
## Navegação da UI 0.2.38
|
|
30
31
|
|
|
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
|
|
32
|
+
A barra lateral mantém os níveis principais, nesta ordem: **Início**, **Pipeline**, **Automação**, **Edição**, **Models AI**, **Niche Finder** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas** e **Upload**. **Edição** é expansível e contém **Limpador de Metadados**, **Cortes** e **Editor Python**, nessa ordem. **Models AI** é expansível e contém **Personagens** e **Redes Sociais**, nessa ordem. **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
33
|
|
|
33
34
|
## Instalação
|
|
34
35
|
|
|
@@ -115,9 +116,9 @@ thunderbolt
|
|
|
115
116
|
No Windows PowerShell, se `npx` for bloqueado por `npx.ps1`, use directamente `npx.cmd`:
|
|
116
117
|
|
|
117
118
|
```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.
|
|
119
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.38 install
|
|
120
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.38 doctor
|
|
121
|
+
npx.cmd --yes @danhachuel/thunderbolt@0.2.38
|
|
121
122
|
```
|
|
122
123
|
|
|
123
124
|
Como alternativa, pode permitir scripts para o seu utilizador:
|
package/app/main.py
CHANGED
|
@@ -882,6 +882,12 @@ def render_niche_finder_apify():
|
|
|
882
882
|
st.json({key: value for key, value in last_run.items() if key != "parameters"})
|
|
883
883
|
|
|
884
884
|
|
|
885
|
+
def render_edit_placeholder(page_title: str, description: str):
|
|
886
|
+
st.title(page_title)
|
|
887
|
+
st.caption(description)
|
|
888
|
+
st.info("Esta aba está reservada para desenvolvimento futuro e ainda não executa nenhuma operação.")
|
|
889
|
+
|
|
890
|
+
|
|
885
891
|
def render_videos():
|
|
886
892
|
st.subheader("Vídeos e backlog")
|
|
887
893
|
st.caption("Acompanhamento dos vídeos criados, estados da pipeline e controlos de execução.")
|
|
@@ -1642,7 +1648,15 @@ def main():
|
|
|
1642
1648
|
("Criação de Vídeos", ":material/add_circle:", "Criação de Vídeos"),
|
|
1643
1649
|
("Criação de Músicas", ":material/music_note:", "Criação de Músicas"),
|
|
1644
1650
|
("Upload", ":material/cloud_upload:", "Upload"),
|
|
1651
|
+
]
|
|
1652
|
+
edition_items = [
|
|
1645
1653
|
("Limpador de Metadados", ":material/edit_note:", "Limpador de Metadados"),
|
|
1654
|
+
("Cortes", ":material/content_cut:", "Cortes"),
|
|
1655
|
+
("Editor Python", ":material/code:", "Editor Python"),
|
|
1656
|
+
]
|
|
1657
|
+
models_ai_items = [
|
|
1658
|
+
("Personagens", ":material/person:", "Personagens"),
|
|
1659
|
+
("Redes Sociais", ":material/share:", "Redes Sociais"),
|
|
1646
1660
|
]
|
|
1647
1661
|
settings_items = [
|
|
1648
1662
|
("Canais", ":material/ondemand_video:", "Canais"),
|
|
@@ -1658,6 +1672,8 @@ def main():
|
|
|
1658
1672
|
("Início", ":material/home:", "Início"),
|
|
1659
1673
|
("Pipeline", ":material/account_tree:", "Pipeline"),
|
|
1660
1674
|
("Automação", ":material/schedule:", "Automação"),
|
|
1675
|
+
("Edição", ":material/edit:", "Edição"),
|
|
1676
|
+
("Models AI", ":material/smart_toy:", "Models AI"),
|
|
1661
1677
|
("Niche Finder", ":material/search:", "Niche Finder"),
|
|
1662
1678
|
("Configurações", ":material/settings:", "Configurações"),
|
|
1663
1679
|
]
|
|
@@ -1670,7 +1686,7 @@ def main():
|
|
|
1670
1686
|
"Configurações Técnicas": "Configurações Técnicas",
|
|
1671
1687
|
}
|
|
1672
1688
|
current_page = aliases.get(st.session_state.get("page", "Início"), st.session_state.get("page", "Início"))
|
|
1673
|
-
if current_page not in {item[0] for item in top_pages + pipeline_items + niche_finder_items + settings_items}:
|
|
1689
|
+
if current_page not in {item[0] for item in top_pages + pipeline_items + edition_items + models_ai_items + niche_finder_items + settings_items}:
|
|
1674
1690
|
current_page = "Início"
|
|
1675
1691
|
st.session_state["page"] = current_page
|
|
1676
1692
|
|
|
@@ -1690,6 +1706,14 @@ def main():
|
|
|
1690
1706
|
with st.expander("Pipeline", expanded=current_page in {item[0] for item in pipeline_items}, icon=":material/account_tree:"):
|
|
1691
1707
|
for child_target, child_icon, child_label in pipeline_items:
|
|
1692
1708
|
render_nav_button(child_target, child_icon, child_label, child=True)
|
|
1709
|
+
elif target == "Edição":
|
|
1710
|
+
with st.expander("Edição", expanded=current_page in {item[0] for item in edition_items}, icon=":material/edit:"):
|
|
1711
|
+
for child_target, child_icon, child_label in edition_items:
|
|
1712
|
+
render_nav_button(child_target, child_icon, child_label, child=True)
|
|
1713
|
+
elif target == "Models AI":
|
|
1714
|
+
with st.expander("Models AI", expanded=current_page in {item[0] for item in models_ai_items}, icon=":material/smart_toy:"):
|
|
1715
|
+
for child_target, child_icon, child_label in models_ai_items:
|
|
1716
|
+
render_nav_button(child_target, child_icon, child_label, child=True)
|
|
1693
1717
|
elif target == "Niche Finder":
|
|
1694
1718
|
with st.expander("Niche Finder", expanded=current_page in {item[0] for item in niche_finder_items}, icon=":material/search:"):
|
|
1695
1719
|
for child_target, child_icon, child_label in niche_finder_items:
|
|
@@ -1708,8 +1732,14 @@ def main():
|
|
|
1708
1732
|
"Automação": render_automation,
|
|
1709
1733
|
"Niche Finder Kaggle": render_niche_finder,
|
|
1710
1734
|
"Niche Finder Apify": render_niche_finder_apify,
|
|
1711
|
-
"
|
|
1735
|
+
"Edição": lambda: render_edit_placeholder("Edição", "Seleccione uma das abas de edição no menu expansível."),
|
|
1712
1736
|
"Limpador de Metadados": render_metadata_cleaner,
|
|
1737
|
+
"Cortes": lambda: render_edit_placeholder("Cortes", "Área reservada para a futura funcionalidade de cortes de vídeo."),
|
|
1738
|
+
"Editor Python": lambda: render_edit_placeholder("Editor Python", "Área reservada para o futuro editor Python."),
|
|
1739
|
+
"Models AI": lambda: render_edit_placeholder("Models AI", "Seleccione uma das abas Models AI no menu expansível."),
|
|
1740
|
+
"Personagens": lambda: render_edit_placeholder("Personagens", "Área reservada para a futura funcionalidade de personagens."),
|
|
1741
|
+
"Redes Sociais": lambda: render_edit_placeholder("Redes Sociais", "Área reservada para a futura funcionalidade de redes sociais."),
|
|
1742
|
+
"Upload": render_upload,
|
|
1713
1743
|
"Canais": render_channels,
|
|
1714
1744
|
"Blueprints": render_blueprints,
|
|
1715
1745
|
"MCP": render_mcp,
|
package/package.json
CHANGED