Yumi is a local-first campus study assistant built on a standard PyTorch stack. It is designed for offline deployment and local data residency.
- Course and material management (local text ingestion + chunking)
- Material file upload (
txt/md/pdf/image) with OCR for image notes - Classroom audio intelligent assistant:
- offline lecture transcription + summary
- custom terminology normalization
- simple speaker diarization (Speaker A/B)
- Anki flashcard CSV export
- batch processing with progress visualization
- Note summarization (summary + keywords)
- Local QA with source excerpts
- Final-week schedule generation
- Fixed-event conflict avoidance (classes, meetings, commute)
- Plan analytics (hours by day/course + load stability)
- ICS export for calendar apps
PyTorch+ lightweight local NLP adapter (replaceable with larger local models)FastAPIfor backend serviceStreamlitfor local UISQLitefor local storage
- Install dependencies
pip install -r requirements.txt- Initialize DB
python scripts/init_db.py- Run API
python scripts/run_api.py- Run UI (new terminal)
python scripts/run_ui.pyDefault URLs:
- API:
http://127.0.0.1:8000 - UI:
http://127.0.0.1:8501
- Ensure phone and computer are on the same Wi-Fi.
- Start UI:
python scripts/run_ui.py- The script prints LAN address like
http://192.168.x.x:8501. - Open that address on your phone browser.
Optional environment variables:
YUMI_UI_HOST(default0.0.0.0)YUMI_UI_PORT(default8501)YUMI_API_HOST(default127.0.0.1)YUMI_API_PORT(default8000)YUMI_DEV_RELOAD(1to enable API hot reload)
Android app shell is included at:
mobile/yumi-android
It provides:
- installable APK
- server URL input and persistence
- full WebView access to Yumi
- file picker support for upload workflows
Build instructions: see mobile/yumi-android/README.md
Course priority score:
priority = 0.35*urgency + 0.30*(1-mastery) + 0.20*difficulty + 0.15*credit_weight
Planner rules:
- Deep block: default
90minutes - Review block: default
30minutes - Buffer time: default
20% - Mandatory reviews at
D-7,D-3,D-1 - Fixed weekly events remove occupied intervals before planning
POST /coursesGET /coursesPOST /courses/{course_id}/materialsPOST /courses/{course_id}/materials/uploadPOST /audio/process-uploadGET /audio/transcripts?course_id=&limit=GET /audio/{transcript_id}/anki.csvPOST /glossary/termsGET /glossary/termsPOST /notes/summarizePOST /qa/askPOST /planner/examsGET /planner/examsPUT /planner/availabilityGET /planner/availabilityPOST /planner/fixed-eventsPUT /planner/fixed-eventsGET /planner/fixed-eventsPOST /planner/final-week-planGET /planner/events?start_date=YYYY-MM-DD&end_date=YYYY-MM-DDGET /planner/analysis?start_date=YYYY-MM-DD&end_date=YYYY-MM-DDGET /planner/export/ics?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&include_fixed=true
coursesnotesdocument_chunksexamsavailability_slotsfixed_eventsstudy_events
- Higher-accuracy domain ASR model packs
- FAISS embedding retrieval
- Personal knowledge graph per course
- Problem solved:
- students/teachers spend too much time turning lecture recordings into structured notes
- manual transcription is slow and key points are hard to extract
- Core promise:
- data stays on device from audio input to note output
- no network requests during inference (except first-time model download if not cached)
- Typical scenarios:
- lecture recording review
- seminar archive
- group discussion minutes
- language listening recap
- Target users:
- undergraduates (heavy coursework in engineering/medical majors)
- postgraduates
- teachers
- self-learners
Image OCR uses pytesseract, which requires local Tesseract OCR binary installation.
On Windows, install Tesseract and ensure tesseract.exe is in PATH.