On this page

New featurev0.15.0

Pull ingredients straight out of a recipe video

Published on September 22, 2026

What shipped

If you cook from videos, you already know the ritual: pause, scroll to the description, squint at a wall of hashtags and emoji looking for the ingredient list, then re-type all of it into your log by hand. That's gone now.

On any recipe attempt, you can paste a TikTok or YouTube link and Loz will:

  1. Fetch the video's description and cache it, so pasting the same link twice doesn't hit the source again.
  2. Run it through a dedicated extraction pipeline that separates real ingredient lines from captions, hashtags, calls-to-action, and creator boilerplate — in Arabic and English, including Arabic quantity words and numerals.
  3. Match each candidate against our ingredient dictionary using fuzzy matching, so "زبده" and "بترينا" resolve to the same ingredient family even with typos or brand names mixed in.
  4. Show you a review list before anything touches your attempt — you decide what gets added, edited, or thrown out.

Nothing is added silently. The suggestions land in the same ingredient picker you already use, with quantities and units pre-filled when we're confident about them.

Why this took a new package

The extraction and parsing logic that used to live inside packages/core — the ingredient parser, the section classifier, the Arabic quantity normalizer — grew enough surface area (and enough of its own test suite) that it deserved to stand on its own. It's now @recipe/ingredients-domain, a standalone workspace package with no dependency on Convex or React. That's not user-facing, but it's why this release also touches a lot of files that have nothing to do with video: imports moved, nothing behaviorally changed for existing ingredient parsing.

Under the hood

  • New Convex functions handle the TikTok/YouTube description fetch, with a small cache layer (video-description-cache) so repeated pastes of the same link are free.
  • A cook-vocabulary matcher sits between raw extracted text and the ingredient dictionary, tuned on real recipe-video phrasing rather than generic product names.
  • Rate limiting was extended to cover the new video-ingestion path, so this can't be used to hammer TikTok/YouTube on your behalf.
  • A dish's ingredient count is now computed directly from its attempts instead of asking a model to guess it — a small correctness fix that shipped alongside this.

Also in this release

  • fix: insights generation now has a hard ceiling per signed-in cook, so a burst of requests can't run away.
  • fix: ingredient extraction no longer treats an entire free-text description as one giant ingredient list when the source has no real structure — it backs off instead of guessing.