270 lines
6.4 KiB
Markdown
270 lines
6.4 KiB
Markdown
# 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
|