尚未检测到更新。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.