Skip to content

AndresRJ18/Azurely

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Azurely πŸŽ™οΈ

Azurely Banner

Transform your meeting recordings into actionable summaries β€” powered by Azure AI

FastAPI Python Azure Speech Azure OpenAI License


πŸ“Œ Overview

Azurely is an AI-powered meeting summarizer that takes audio recordings and returns structured summaries, key points, and action items β€” all in seconds.

Upload an audio file β†’ get a full transcription + executive summary + action items. Built with Azure Speech Service for transcription and Azure OpenAI for intelligent analysis.


πŸš€ Features

  • 🎧 Multi-format audio support β€” MP3, WAV, M4A, OGG, MP4
  • πŸ“ Full transcription β€” powered by Azure Speech SDK with continuous recognition
  • πŸ€– AI analysis β€” executive summary, key points, and action items via GPT-4o-mini
  • ⚑ Chunk processing β€” handles long recordings by splitting into 2-minute segments
  • 🌍 Multilingual β€” supports es-ES, es-MX, en-US, en-GB, pt-BR
  • πŸ”’ Auto cleanup β€” temporary files deleted after every request

πŸ—οΈ Architecture

Audio Upload (MP3/WAV/M4A)
        ↓
  Format Validation
        ↓
  ffmpeg Conversion
  (β†’ WAV 16kHz mono)
        ↓
  Audio Chunking
  (2-min segments)
        ↓
  Azure Speech SDK
  (Transcription)
        ↓
  Azure OpenAI
  (GPT-4o-mini Analysis)
        ↓
  JSON Response
  (Summary + Action Items)

πŸ“ Project Structure

azurely/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ main.py                # FastAPI app, CORS, lifespan
β”‚   β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”‚   β”œβ”€β”€ config.py          # pydantic-settings
β”‚   β”‚   β”‚   └── exceptions.py      # custom HTTP exceptions
β”‚   β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”‚   β”œβ”€β”€ meeting.py         # MeetingSummary, ActionItem
β”‚   β”‚   β”‚   └── requests.py        # AnalyzeRequest
β”‚   β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”‚   β”œβ”€β”€ speech.py          # Azure Speech STT
β”‚   β”‚   β”‚   └── openai_service.py  # Azure OpenAI analysis
β”‚   β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”‚   β”œβ”€β”€ audio.py           # ffmpeg conversion + chunking
β”‚   β”‚   β”‚   └── cleanup.py         # temp file cleanup
β”‚   β”‚   └── api/
β”‚   β”‚       β”œβ”€β”€ dependencies.py    # file validation
β”‚   β”‚       └── routes/
β”‚   β”‚           β”œβ”€β”€ health.py      # GET /health
β”‚   β”‚           └── analyze.py     # POST /api/analyze
β”‚   β”œβ”€β”€ .env.example
β”‚   β”œβ”€β”€ requirements.txt
β”‚   └── requirements-dev.txt
└── frontend/
    β”œβ”€β”€ index.html
    └── assets/
        β”œβ”€β”€ css/styles.css
        └── js/
            β”œβ”€β”€ api.js
            β”œβ”€β”€ ui.js
            └── main.js

βš™οΈ Setup

Prerequisites

  • Python 3.13+
  • ffmpeg installed and in PATH
  • Azure account with:
    • Azure Speech Service resource
    • Azure OpenAI resource with a deployed model

Installation

# Clone the repo
git clone https://github.com/AndresRJ18/Azurely.git
cd Azurely/backend

# Create virtual environment
python -m venv venv
source venv/Scripts/activate  # Windows
# source venv/bin/activate    # Linux/Mac

# Install dependencies
pip install -r requirements-dev.txt

# Configure environment
cp .env.example .env
# Edit .env with your Azure credentials

Environment Variables

# .env
AZURE_SPEECH_KEY=your_speech_key
AZURE_SPEECH_REGION=eastus
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/openai/v1
AZURE_OPENAI_KEY=your_openai_key
AZURE_OPENAI_DEPLOYMENT=gpt-4o-mini
MAX_AUDIO_SIZE_MB=25
TEMP_DIR=/tmp/azurely

Run

python -m uvicorn app.main:app --reload --port 8000

API available at http://localhost:8000 Swagger UI at http://localhost:8000/docs


πŸ“‘ API Reference

GET /health

Verifica conectividad con Azure Speech y Azure OpenAI.

{
  "status": "ok",
  "service": "Azurely API",
  "azure_speech": "connected",
  "azure_openai": "connected"
}

POST /api/analyze

Analiza un archivo de audio y retorna el resumen.

Request β€” multipart/form-data

Field Type Required Default
file audio file βœ… β€”
language string (BCP-47) ❌ es-ES

Response

{
  "summary": "Resumen ejecutivo de la reuniΓ³n...",
  "key_points": [
    "Punto clave 1",
    "Punto clave 2"
  ],
  "action_items": [
    {
      "task": "Enviar el plan de medios",
      "assignee": "Carlos",
      "deadline": "viernes"
    }
  ],
  "transcription": "TranscripciΓ³n completa del audio...",
  "language_detected": "es-ES",
  "duration_estimate": "5 minutos"
}

Supported languages

Code Language
es-ES EspaΓ±ol (EspaΓ±a)
es-MX EspaΓ±ol (MΓ©xico)
en-US English (US)
en-GB English (UK)
pt-BR PortuguΓͺs (Brasil)

πŸ› οΈ Tech Stack

Layer Technology
Backend framework FastAPI
Speech-to-Text Azure Speech SDK
AI Analysis Azure OpenAI (GPT-4o-mini)
Audio processing ffmpeg + ffmpeg-python
Config management pydantic-settings
Async file I/O aiofiles

πŸ‘₯ Team

Built at a hackathon by a team of 4 Informatics Engineering students.

Role Scope
Backend FastAPI, Azure services, audio pipeline
Frontend UI, file upload, results rendering
DevOps Docker, Azure Container Apps deployment

πŸ“„ License

MIT License β€” see LICENSE for details.


Built with ❀️ using Azure AI Services

About

πŸŽ™οΈ AI-powered meeting summarizer built by a team of engineering students β€” upload any audio and get transcription, summary & action items using Azure Speech + OpenAI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors