From 3caea371871c69b6293c4327d9fb879cf0820b75 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro Date: Mon, 9 Feb 2026 18:30:52 -0300 Subject: [PATCH] first commit --- README.md | 269 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4d888b1 --- /dev/null +++ b/README.md @@ -0,0 +1,269 @@ +# VideoStudy.app - FASE 1 ✅ + +Plataforma de análise de vídeos do YouTube usando Inteligência Artificial com Semantic Kernel. + +## 📋 Estrutura do Projeto + +``` +VideoStudy.app/ +├── VideoStudy.API/ # ASP.NET Core Web API (Semantic Kernel) +├── VideoStudy.Desktop/ # Blazor Hybrid Desktop Application +│ ├── VideoStudy.Desktop/ # Server project +│ └── VideoStudy.Desktop.Client/ # Client project +├── VideoStudy.Shared/ # Shared models and interfaces +├── Tests/ # Test projects +├── REFERENCES.md # Análise de referências +└── README.md # Este arquivo +``` + +## 🚀 Quick Start + +### Pré-requisitos +- **.NET 8.0 SDK** ou superior +- **Visual Studio 2022 / VS Code** (opcional) + +### 1. Clonar/Abrir Projeto +```bash +cd /mnt/c/vscode/VideoStudy.app +``` + +### 2. Restaurar Dependências +```bash +dotnet restore +``` + +### 3. Executar a API + +#### Opção A: Com Ollama (Local, Grátis) +Certifique-se que Ollama está rodando em `http://localhost:11434` + +```bash +cd VideoStudy.API +dotnet run +``` + +A API estará disponível em: `http://localhost:5000` + +#### Opção B: Com Groq (Cloud, Grátis) +1. Crie conta em https://console.groq.com +2. Gere API Key +3. Configure em `VideoStudy.API/appsettings.json`: + +```json +"LlmSettings": { + "Provider": "Groq", + "ModelId": "llama-3.1-8b-instant", + "Endpoint": "https://api.groq.com/openai/v1", + "ApiKey": "your-groq-api-key" +} +``` + +```bash +cd VideoStudy.API +dotnet run +``` + +### 4. Executar Desktop App (em outro terminal) + +```bash +cd VideoStudy.Desktop/VideoStudy.Desktop +dotnet run +``` + +A aplicação estará disponível em: `http://localhost:5001` + +## 📡 Endpoints da API + +### Health Check +``` +GET /health +``` + +Resposta: +```json +{ + "status": "ok", + "timestamp": "2026-02-06T10:00:00Z" +} +``` + +### Analisar Vídeo +``` +POST /api/analyze +Content-Type: application/json + +{ + "videoUrl": "https://www.youtube.com/watch?v=...", + "language": "en", + "mode": "fast" +} +``` + +Resposta: +```json +{ + "videoTitle": "Video Title", + "transcript": "Topics covered...", + "analysis": "Detailed analysis...", + "keyMoments": [ + { + "timestamp": "00:00:30", + "description": "Key moment description", + "startSeconds": 30 + } + ], + "status": "success", + "errorMessage": null +} +``` + +## 🏗️ Arquitetura + +### VideoStudy.Shared +Modelos compartilhados entre API e Desktop: +- `AnalysisRequest` - Entrada do usuário +- `AnalysisResponse` - Resposta da análise +- `KeyMoment` - Momento importante no vídeo +- `ProgressUpdate` - Atualização de progresso + +### VideoStudy.API +- **Framework**: ASP.NET Core 8.0 +- **AI Integration**: Semantic Kernel 1.70.0 +- **LLM Providers**: + - Groq (padrão) + - Ollama (local) + - OpenAI (opcional) +- **CORS**: Habilitado para todas as origens (desenvolvimento) + +### VideoStudy.Desktop +- **Framework**: Blazor Hybrid +- **UI**: Bootstrap 5 + Razor Components +- **Comunicação**: HttpClient para chamadas à API +- **Recursos**: + - URL input para vídeos do YouTube + - Seleção de idioma + - Modo Fast/Advanced + - Barra de progresso + - Debug logs + - Tratamento de erros + +## 🔧 Configuração Avançada + +### Mudar LLM Provider + +Edite `VideoStudy.API/Program.cs` (linhas 21-37): + +#### Para Ollama: +```csharp +builder.Services.AddOllamaChatCompletion( + "llama2", + new Uri("http://localhost:11434") +); +``` + +#### Para OpenAI GPT-4: +```csharp +builder.Services.AddOpenAIChatCompletion( + "gpt-4o-mini", + "sk-proj-your-key" +); +``` + +#### Para Google Gemini: +```csharp +builder.Services.AddGoogleAIGeminiChatCompletion( + "gemini-1.5-flash-latest", + "your-google-api-key" +); +``` + +### Build para Produção + +```bash +dotnet build -c Release +dotnet publish -c Release -o ./publish +``` + +## 📊 FASE 2 - Status + +✅ **Concluído:** +- Download de vídeos do YouTube (YoutubeExplode) +- Extração de legendas (Modo Rápido) +- Transcrição com Whisper.NET (Modo Avançado) +- Extração de screenshots (FFmpeg) +- Fluxo completo: URL → Transcrição → Análise IA → Screenshots +- Progress reporting em tempo real + +❌ **Não incluído (FASE 3):** +- Geração de PDF +- UI refinada (Design System) +- Persistência (MongoDB) +- Autenticação + +## 🔧 Requisitos Externos (Fase 2) + +### FFmpeg +Para que o "Modo Avançado" (Whisper e Screenshots) funcione, o **FFmpeg** deve estar instalado e acessível no PATH do sistema. + +**Linux (Ubuntu/Debian):** +```bash +sudo apt update && sudo apt install ffmpeg +``` + +**Windows:** +Baixe em [ffmpeg.org](https://ffmpeg.org/download.html) e adicione a pasta `bin` às Variáveis de Ambiente. + +### Whisper Model +O modelo de IA (base) será baixado automaticamente na primeira execução para a pasta `VideoStudy.Desktop/bin/Debug/net8.0/models/`. + +## 🔄 FASE 3 - Próximos Passos + +Será implementado: +- YouTubeService (YoutubeExplode) +- TranscriptionService (Whisper.NET) +- ScreenshotService (FFmpeg) +- Modos: Fast (legendas) e Advanced (Whisper) +- Progress reporting em tempo real +- Tratamento robusto de erros + +## 📝 Notas + +- A API tem CORS habilitado para todos os domínios (alterar para produção!) +- Sem autenticação no momento (adicionar em FASE 3) +- LLM provider deve estar ativo antes de iniciar (Ollama ou Groq) +- Desktop aguarda API em `http://localhost:5000` (configurável) + +## 🐛 Troubleshooting + +### Erro: "Unable to connect to API" +- Verifique se a API está rodando: `dotnet run` em `VideoStudy.API` +- Confirme que porta 5000 está livre +- Verifique `appsettings.json` no Desktop: `BaseUrl` deve ser `http://localhost:5000` + +### Erro: "LLM Provider not available" +- **Se usar Groq**: Verifique API key em `VideoStudy.API/appsettings.json` +- **Se usar Ollama**: Certifique-se que Ollama está rodando (`ollama serve`) + +### Erro: "ModelId not found" +- Verifique o nome do modelo em `appsettings.json` +- Ollama: modelos podem ser listados com `ollama list` +- Groq: `llama-3.1-8b-instant` é o padrão + +## 📞 Versões de Dependências + +| Package | Versão | Propósito | +|---------|--------|-----------| +| Microsoft.SemanticKernel | 1.70.0 | IA Integration | +| Microsoft.SemanticKernel.Connectors.OpenAI | 1.70.0 | OpenAI-compatible | +| Microsoft.SemanticKernel.Connectors.Ollama | 1.70.0-alpha | Local LLM | +| Bootstrap | 5.3.2 | CSS Framework (Desktop) | + +## 📄 Licença + +Projeto em desenvolvimento - Todos os direitos reservados + +--- + +**Última atualização:** 2026-02-06 +**Fase:** 1 (Estrutura Base) +**Status:** ✅ Pronto para FASE 2