尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證homecookd: a parent cooks a family dish on video, and their kid gets a recipe they can follow. Built for the 2.6 hackathon.
翻譯準備中
正在載入完整 README。
檢視完整 README ↗An older family member cooks once. The next generation cooks it anywhere, hearing their real voice.
A family recipe app that keeps the person in the recipe and keeps the family talking.
Click the thumbnail or badge to watch the full demo video on YouTube
1. Recipes that keep the person. Family recipes were never written down. They live in the hands and voices of our older family members. homecookd turns one cooking video into a step-by-step recipe, and every step plays the cook's own clip.
2. Connection across distance and language. The family cook can record in their ethnic language without typing, and a younger family member follows along in English. When they get stuck, the question goes back to the cook, so the recipe starts a conversation.
3. Hands-free, voice-first. The kid's hands are covered in flour, so they cook by talking to homie, a voice guide that reads steps, sets timers and plays the family cook's clip of that moment.
| Folder | What's in it |
|---|---|
app/ | Expo / React Native iPhone app: the family cook records, the kid cooks by voice |
voice/ | Live voice service (homie) on Cloud Run: Cartesia Ink 2 + Sonic, Claude |
convex/ | Backend: families, recipes, questions, voice notes, live sync, Moss search |
pipeline/ | Python + ffmpeg video worker: cuts clips, runs Gemini and Muse Spark, publishes |
glasses/, edible-glasses/ | ESP32-S3 smart glasses and the VM that turns their stream into video |
web/ | Next.js site on Vercel: landing page, recipe share pages, invites |
cloud/ | Upload signer and Google Cloud setup scripts |
Built with: Cartesia (Ink 2, Sonic) · Claude · Gemini · Muse Spark (Meta) · Moss · Convex · Expo · Google Cloud · Vercel · ESP32-S3
Voice is how both people use homecookd: the kid's hands are busy, and many older family members would rather talk than type, often not in English.
First audio from Sonic arrives in about 120–250 ms.
Gemini is the part of homecookd that watches the family cook's video. To get there we tested several
Gemini models on real cooking footage and compared them on time, cost and accuracy. We finalized
on Gemini 3.8 Flash (gemini-3.8-flash).
| Job | Model | Where |
|---|---|---|
| Watch the video: steps, timestamps, ingredients, the cook's words | gemini-3.8-flash (final) | pipeline/process.py |
| Put out-of-order clips back in order (one small text-only call) | gemini-3.8-flash | pipeline/order.py |
| Check each recipe against frames from the video | gemini-3.8-flash | pipeline/evaluate.py |
| Translate the cook's voice-note answers (e.g. Marathi to English) | gemini-3.8-flash | convex/lib/translate.ts |
| Live listening for languages Ink 2 doesn't cover (Marathi) | gemini-3.5-transcribe-live | voice/src/geminiLive.ts |
| homie's backup voice when Sonic fails | gemini-3.8-flash-tts | voice/src/geminiTts.ts |
| Gemini 3.1 Pro (preview) | Gemini 3.8 Flash | |
|---|---|---|
| Price per 1M tokens (in / out) | $2.00 / $12.00 | $0.75 / $3.75 |
| Extract + merge, same 2 clips | ~$0.20 (90 s clip alone: $0.08, 33 s) | $0.047 for all 3 calls |
| Projected 3-hour recording | ~$3.60 – $6.30 | ~$1.30 – $2.40 |
| Speed | 15-min files could take 3+ min each | Noticeably faster; Batch API run of 2 clips done in ~3 min at half price |
| Accuracy | Most consistent step count run to run | Good recipes; step count varied slightly between runs (8 vs 9), fixed with schema checks and a retry |
Full numbers: docs/COSTS.md.
MEDIA_RESOLUTION_LOW pinned. 5,460 tokens per minute of video vs 17,340 on HIGH (3.2× fewer).pipeline/schema.py), with one retry, which evened out Flash's run-to-run variation.1. Add your keys. Copy .env.example to .env and app/.env.example to app/.env, then fill in
your own keys. No keys are committed to this repo.
2. Start the voice service (homie).
cd voice && npm ci && npm run dev
3. Start the app in a second terminal, then scan the QR code with Expo Go on your iPhone.
cd app && npm ci && npx expo start --clear
More detail: voice/README.md · docs/PRD.md · docs/build/STACK.md
iPhone (Expo app) Google Cloud (free tier) Laptop
───────────────── ──────────────────────── ──────
pick videos ──POST──▶ Cloud Run fn "edible-upload" ──▶ jobs/<id>.json (public status)
◀── signed PUT URLs ──
upload in background ─PUT─▶ gs://edible-uploads-… (private) ◀──poll── pipeline/worker.py
prep → Gemini → publish
library / recipe ◀──GET── gs://edible-media-… (public, no listing) ◀── play.mp4, voice.m4a,
poster.jpg, recipe.json, library.json
Setup: a Python .venv from pipeline/requirements.txt, ffmpeg, gcloud auth login --update-adc,
cloud/grant-iam.sh, cloud/deploy-signer.sh.
Process a video by hand:
.venv/bin/python pipeline/prep.py --id sunday-pancakes --title "Sunday Pancakes" --cook "Mom" --relation "Mom" input/pancakes/*.mov
.venv/bin/python pipeline/process.py --id sunday-pancakes
.venv/bin/python pipeline/publish.py --id sunday-pancakes
Process phone uploads: .venv/bin/python pipeline/worker.py --interval 60
(retry a job with --retry <job_id>).
If clips are out of order, process.py reorders them by content (tests: pipeline/test_order.py).
Check recipes with pipeline/schema.py; republish everything with pipeline/publish.py --all.