@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.
@@ -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.36
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.36 install
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.36 install
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**, **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**, **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. **Pipeline > 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.
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.36 install`; o instalador detecta e reutiliza o que já estiver válido.
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, Upload e Limpador de Metadados |
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.36
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**, **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
+ 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.36 install
119
- npx.cmd --yes @danhachuel/thunderbolt@0.2.36 doctor
120
- npx.cmd --yes @danhachuel/thunderbolt@0.2.36
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
- "Upload": render_upload,
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.2.36",
3
+ "version": "0.2.38",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "main": "scripts/cli.mjs",
6
6
  "type": "module",