{"id":31789151,"url":"https://github.com/vladimir-skvortsov/lightpitch","last_synced_at":"2026-04-19T02:04:11.425Z","repository":{"id":313818097,"uuid":"1050367749","full_name":"vladimir-skvortsov/lightpitch","owner":"vladimir-skvortsov","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-08T16:44:26.000Z","size":9641,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-08T18:07:50.526Z","etag":null,"topics":["ai","hackathon","langchain","llm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vladimir-skvortsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-04T10:32:32.000Z","updated_at":"2025-09-08T16:44:30.000Z","dependencies_parsed_at":"2025-09-08T18:19:12.384Z","dependency_job_id":null,"html_url":"https://github.com/vladimir-skvortsov/lightpitch","commit_stats":null,"previous_names":["vladimir-skvortsov/lightpitch"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/vladimir-skvortsov/lightpitch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimir-skvortsov%2Flightpitch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimir-skvortsov%2Flightpitch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimir-skvortsov%2Flightpitch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimir-skvortsov%2Flightpitch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vladimir-skvortsov","download_url":"https://codeload.github.com/vladimir-skvortsov/lightpitch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vladimir-skvortsov%2Flightpitch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004185,"owners_count":26083689,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","hackathon","langchain","llm"],"created_at":"2025-10-10T14:46:30.003Z","updated_at":"2025-10-10T14:46:36.048Z","avatar_url":"https://github.com/vladimir-skvortsov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LightPitch\n\n**LightPitch** is an **AI coach for public speaking**. Upload a pitch (video/audio) or record in the browser, and the system analyzes **speech, eye contact \u0026 gestures, text, and slides**. It aggregates metrics into a single score and returns **clear, actionable recommendations**.\n\n**Who it’s for:** founders, PMs/analysts, educators, students, and internal demo speakers.\n**Why:** prepare a stronger pitch faster—reduce fillers, improve eye contact and posture, and make slides more readable—with objective progress metrics.\n\nArchitecture: **Frontend (React + Vite + Tailwind)**, **Backend (FastAPI)**, and ML pipelines for **audio / video / text / slides**, runnable via **Docker** or locally.\n\n---\n\n## Table of Contents\n\n* [Stack](#stack)\n* [Features \u0026 Metrics](#features--metrics)\n* [Repository Structure](#repository-structure)\n* [Requirements](#requirements)\n* [Quick Start](#quick-start)\n  * [Environment Variables](#environment-variables)\n  * [Run with Docker Compose](#run-with-docker-compose)\n  * [Run via `run.sh`](#run-via-runsh)\n* [API \u0026 Frontend](#api--frontend)\n* [Pipelines](#pipelines)\n* [Pre-commit \u0026 Code Style](#pre-commit--code-style)\n* [License](#license)\n* [Developers](#developers)\n\n---\n\n## Stack\n\n* **Frontend:** React + Vite + TailwindCSS\n* **Backend:** FastAPI (Uvicorn)\n* **ML / CV / Audio:** OpenCV, MediaPipe (FaceMesh / Hands / Pose), ffmpeg, pyannote.audio (VAD), faster-whisper (ASR), LangChain (NLP helpers)\n* **Infra:** Docker, docker compose, Nginx (prod/static)\n\n---\n\n## Features \u0026 Metrics\n\n* **Audio:** speech rate, pauses/fillers, fluency, speech share, ASR with timestamps, coverage vs. a reference script.\n* **Video:** eye visibility, blink filtering, gaze/eye contact, posture \u0026 gestures (openness/activeness).\n* **Text:** clarity, structure, tone/style, rewrite suggestions.\n* **Slides:** readability, density, visual hierarchy.\n* **Overall:** aggregated score + actionable recommendations.\n\n---\n\n## Repository Structure\n\n```\n.\n├── app/\n│   ├── backend/\n│   │   ├── config.py\n│   │   ├── db.py\n│   │   ├── db_models.py\n│   │   ├── main.py\n│   │   ├── pitches.py\n│   │   ├── uploads/\n│   │   ├── requirements.txt\n│   │   └── Dockerfile\n│   └── frontend/\n│       ├── src/\n│       ├── public/\n│       ├── dist/\n│       └──  package.json\n├── models/\n│   ├── audio/\n│   ├── description_generator/\n│   ├── presentation_grader/\n│   ├── text_editor/\n│   ├── video_grader/\n│   ├── utils/\n│   └── __init__.py\n├── data/\n├── nginx/\n├── .env\n├── .env.example\n├── docker-compose.yaml\n├── .pre-commit-config.yaml\n├── pyproject.toml\n├── requirements.txt\n├── run.sh\n└── README.md\n```\n\n---\n\n## Requirements\n\n* **Docker** 24+ and **docker compose** (or Docker Desktop), or\n* **Python** 3.11+ and **Node.js** 18+ for local dev without containers.\n\n---\n\n## Quick Start\n\n### Environment Variables\n\nCopy `.env.example` → `.env` and adjust as needed:\n\n### Run with Docker Compose\n\n```bash\n# build and start\ndocker compose up -d --build\n\n# tail logs (examples)\ndocker compose logs -f backend\ndocker compose logs -f frontend\n\n# stop\ndocker compose down\n```\n\n* Backend (FastAPI): `http://localhost:8000` → Swagger at `/docs`\n* Frontend: port is defined in `docker-compose.yml`\n\n### Run via `run.sh`\n\nHelper script for a quick dev start:\n\n```bash\n# Run both frontend and backend services\n./run.sh all\n\n# Run only the backend service\n./run.sh backend\n\n# Run only the frontend service\n./run.sh frontend\n\n# Show help\n./run.sh help\n```\n\n---\n\n## API \u0026 Frontend\n\n* **FastAPI** — see `app/backend/*.py`. After start, interactive docs are available at `/docs` and `/redoc`.\n* **Frontend** — SPA in `app/frontend/src`. In dev, Vite serves the UI on its own port; for prod, use `npm run build` and serve `dist/` (e.g., via Nginx).\n\n---\n\n## Pipelines\n\n**Speech / Audio**\n\n1. Audio normalization (ffmpeg)\n2. VAD (pyannote.audio) — speech segment detection\n3. ASR (faster-whisper) — transcription with word timestamps\n4. Metrics: speech rate, pauses/fillers, fluency, speech share\n5. Coverage vs. a provided reference script (optional)\n\n**Vision / Video**\n\n1. Frame extraction (OpenCV)\n2. FaceMesh — eye visibility, blink filtering, gaze/eye contact estimation\n3. Pose/Hands (MediaPipe) — posture and gesture “openness/activeness”\n4. Metric aggregation by timestamps\n\n**Text / Slides**\n\n* Text: clarity, structure, tone/style, rewrite suggestions\n* Slides: readability, density, visual hierarchy, recommendations\n\n---\n\n## Models\n\n```\nmodels/\n├── audio/                    # speech metrics, VAD/ASR pipeline glue\n├── video_grader/             # gaze/contact, posture, gestures\n├── presentation_grader/      # slide/image analysis\n├── text_editor/              # structure/tone suggestions\n├── description_generator/    # description generation\n└── utils/\n```\n\n---\n\n## Pre-commit \u0026 Code Style\n\nInstall and run:\n\n```bash\npip install pre-commit\npre-commit install\npre-commit run --all-files\n```\n\n---\n\n## License\n\nSee [`LICENSE`](./LICENSE).\n\n---\n\n## Developers\n\n* [Lead — Vladimir Skvortsov](https://github.com/vladimir-skvortsov)\n* [ML Engineer — Michail Aptukov](https://github.com/LuckyAm20)\n* [ML Engineer — Andrew Afanasev](https://github.com/afafos)\n* [ML Engineer — Mary Prohorova](https://github.com/tatar04k)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladimir-skvortsov%2Flightpitch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvladimir-skvortsov%2Flightpitch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvladimir-skvortsov%2Flightpitch/lists"}