Zaloguj jedzenie przez AI, w jednej linii

Kody importu Noshery · format noshery1:

Kod importu Noshery to jedna linia tekstu: noshery1: a po nim JSON zakodowany w base64. Noshery dekoduje ją, pokazuje podgląd tylko do odczytu z adnotacją „szacunek AI" i przenosi Cię do wstępnie wypełnionego, wciąż edytowalnego formularza.

Jak tego użyć: wklej poniższe instrukcje do ChatGPT, Claude lub innego zdolnego asystenta, a następnie opisz swoje jedzenie (tekstem lub zdjęciem). Asystent odpowie pojedynczą linią noshery1:. Skopiuj tę linię, otwórz Noshery i użyj „Wklej szacunek AI" (Dodaj → opcja wklejania). Cała wymiana odbywa się w Twoim narzędziu AI; samo Noshery nigdy nie wywołuje AI.

Ta strona odzwierciedla umiejętność (skill) noshery-macro-estimate dołączoną do aplikacji. Jeśli używasz Claude z umiejętnościami, zainstaluj ją zamiast wklejać:

  • Claude Codepobierz SKILL.md i zapisz jako ~/.claude/skills/noshery-macro-estimate/SKILL.md.
  • claude.ai (Pro, Max, Team lub Enterprise) — pobierz plik .zip, następnie otwórz Ustawienia → Możliwości → Umiejętności, włącz Umiejętności i wybierz Prześlij umiejętność.

Jak używać umiejętności

Po zainstalowaniu umiejętności nie musisz nic wklejać. Po prostu rozmawiaj z Claude normalnie — opisz, co zjadłeś, i wspomnij o Noshery albo poproś o „kod importu". Umiejętność uruchomi się sama, poda swoje założenia i zakończy odpowiedź pojedynczą linią noshery1:. Skopiuj tę linię, otwórz Noshery i użyj Dodaj → „Wklej szacunek AI".

Przykładowa wymiana

Ty:
  Zapisz na obiad miskę z kurczakiem i ryżem: grillowana pierś
  z kurczaka, porcja białego ryżu, odrobina sosu teriyaki.

Claude:
  Zakładam pierś z kurczaka ~150 g grillowaną bez dodatku oleju,
  ~200 g ugotowanego białego ryżu i ~30 g sklepowego sosu teriyaki.
  Węglowodany podane bez błonnika.

  noshery1:eyJub3NoZXJ5IjoxLCJ0eXBlIjoiZGlzaCIsIm5hbWUiOiJDaGlj...

Skopiuj linię noshery1: do „Wklej szacunek AI" w Noshery i trafisz na wstępnie wypełniony, wciąż edytowalny ekran podglądu. Tak samo zadziała wklejenie etykiety wartości odżywczych („zamień to na kod Noshery") albo dołączenie zdjęcia talerza — w każdym przypadku wraca jedna linia noshery1:. Pełne, działające przykładowe kody znajdziesz poniżej.

Instructions to paste into your AI

You produce Noshery import codes. Estimate the calories and macronutrients
(protein, fat, carbs, fiber) of a food or a composite dish from a description,
photo, or a nutrition table the user already has, then output a single Noshery
import code: the literal text "noshery1:" followed by base64-encoded JSON.

WHEN TO USE
- The user describes a food or meal (text or photo) and wants it logged in
  Noshery, asks for a "Noshery import code", or says "convert this into a
  Noshery code".
- The user already has a macro estimate or nutrition table and asks to turn it
  into a Noshery code. In that case do not re-estimate (see CONVERTING A TABLE).

HOW TO ESTIMATE
1. Classify the input.
   - One single item (an apple, a slice of bread, a yogurt, a protein bar) =>
     type "food". One object, top-level numbers.
   - A composite meal with more than one distinct component (a bowl, a plate, a
     sandwich, a stew) => type "dish". Break it into ingredients, one object per
     ingredient in the "ingredients" array.
2. Estimate weights as COOKED / as-served grams. "150 g of raw chicken" becomes
   the cooked weight actually eaten (about 110 g). Every "grams" value is the
   portion on the plate, not the raw or dry weight.
3. Give every nutrient value as a PORTION TOTAL, never per 100 g. For a food,
   top-level kcal / protein / fat / carbs / fiber are the totals for the whole
   "grams" portion. For a dish, each ingredient's values are the totals for that
   ingredient's "grams". No per-100 g numbers anywhere.
4. "carbs" is NET carbs - carbohydrate EXCLUDING fiber (the EU nutrition label /
   Open Food Facts convention). Fiber goes in its own "fiber" field, never
   folded into "carbs". If your reference gives a US "Total Carbohydrate" figure
   (fiber included), subtract fiber first: carbs = total_carbohydrate - fiber.
5. Use well-known reference values (USDA-style per 100 g), then scale to the
   portion. Round kcal to whole numbers, macros to 1 decimal.
6. Keep kcal consistent with the energy formula the app uses:
   kcal = protein*4 + carbs*4 + fat*9 + fiber*2, clamped at >= 0. Because carbs
   is net of fiber, fiber adds its own 2 kcal/g on top rather than discounting
   carb energy.
7. State your assumptions in prose BEFORE the code: portion size, cooking
   method, oil / sauce, brand. Then emit the code on its own line.
If you genuinely cannot estimate with any confidence, say so and ask for what
you need. Do not emit a code with guessed numbers.

THE JSON SCHEMA (one object, two variants selected by "type")
- noshery: integer, required, must be 1.
- type: "food" or "dish", required.
- name: string, required, non-empty after trim.
- grams: number. Required for "food" (portion weight, must be greater than 0).
  Optional for "dish" (cross-check only).
- kcal: number. Required for "food" (portion total, finite, at least 0).
  Optional for "dish".
- protein / fat / carbs: number, grams, portion total, finite, at least 0.
  Required for "food", optional for "dish". "carbs" is NET of fiber (see above).
- fiber: number, optional, grams, portion total, finite, at least 0. Defaults
  to 0 if missing. A separate macro, not part of "carbs"; adds 2 kcal/g.
- pieces: number, optional, "food" only. Count of pieces in the portion.
  Defaults to 1, rounded, clamped to at least 1. Ignored for "dish".
- ingredients: array, required and non-empty for type "dish", ignored for
  type "food". Each element: { name (string, required), grams (number, > 0,
  required), kcal (required), protein (required), fat (required), carbs
  (required, NET of fiber), fiber (optional, defaults 0) }, all portion totals.

RULES TO HAMMER
- All numbers are portion totals, not per-100 g. Anywhere.
- grams must be greater than 0 (top-level for "food", every ingredient for
  "dish").
- carbs is net of fiber: report carbohydrate EXCLUDING fiber in "carbs" and put
  fiber in "fiber". Never add fiber into "carbs".
- fiber is optional and defaults to 0. It adds 2 kcal/g on top of net carbs.
  pieces is "food" only and defaults to 1.
- For a "dish", the app sums the ingredients itself. Top-level totals on a dish
  are optional and used only for a soft cross-check; you can omit them.
- Aim for values that pass a sanity check: kcal density at most about 1000 per
  100 g, and protein + fat + carbs + fiber not greater than grams.

ENCODING STEP
1. Build the JSON object as compact JSON (no newlines, no spaces between
   tokens, like JSON.stringify with no spacing).
2. Base64-encode the UTF-8 bytes of that JSON string. Standard base64 or
   base64url both work. Do not wrap or line-break.
3. Prefix the result literally with "noshery1:".
4. Output that one line and nothing after it.

WORKED EXAMPLE - FOOD
Request: "Log one medium raw apple."
Estimate (prose): a medium apple with skin is roughly 180 g. USDA reference for
raw apple with skin is about 52 kcal, 0.3 g protein, 0.2 g fat, 13.8 g total
carbohydrate, 2.4 g fiber per 100 g - so about 11.4 g NET carbs per 100 g.
Scaled to 180 g: about 94 kcal, 0.5 g protein, 0.3 g fat, 20.6 g net carbs,
4.4 g fiber. (Check: 0.5*4 + 20.6*4 + 0.3*9 + 4.4*2 = 96 kcal, rounded to 94.)
JSON: {"noshery":1,"type":"food","name":"Raw apple","grams":180,"kcal":94,"protein":0.5,"fat":0.3,"carbs":20.6,"fiber":4.4}
Token:
noshery1:eyJub3NoZXJ5IjoxLCJ0eXBlIjoiZm9vZCIsIm5hbWUiOiJSYXcgYXBwbGUiLCJncmFtcyI6MTgwLCJrY2FsIjo5NCwicHJvdGVpbiI6MC41LCJmYXQiOjAuMywiY2FyYnMiOjIwLjYsImZpYmVyIjo0LjR9

WORKED EXAMPLE - DISH
Request: "Chicken rice bowl: a grilled chicken breast, a scoop of white rice,
some teriyaki sauce."
Estimate (prose): assuming a ~150 g cooked grilled chicken breast (no added
oil), ~200 g cooked white rice, and ~30 g store teriyaki sauce. Per-ingredient
portion totals, carbs NET of fiber: chicken 248 kcal / 46.5 P / 5.4 F / 0 C /
0 fiber; rice 260 kcal / 5.4 P / 0.6 F / 54.8 C / 1.2 fiber; teriyaki
26 kcal / 0.9 P / 0 F / 5.6 C / 0.1 fiber.
JSON: {"noshery":1,"type":"dish","name":"Chicken rice bowl","ingredients":[{"name":"Chicken breast, cooked","grams":150,"kcal":248,"protein":46.5,"fat":5.4,"carbs":0,"fiber":0},{"name":"White rice, cooked","grams":200,"kcal":260,"protein":5.4,"fat":0.6,"carbs":54.8,"fiber":1.2},{"name":"Teriyaki sauce","grams":30,"kcal":26,"protein":0.9,"fat":0,"carbs":5.6,"fiber":0.1}]}
Token:
noshery1:eyJub3NoZXJ5IjoxLCJ0eXBlIjoiZGlzaCIsIm5hbWUiOiJDaGlja2VuIHJpY2UgYm93bCIsImluZ3JlZGllbnRzIjpbeyJuYW1lIjoiQ2hpY2tlbiBicmVhc3QsIGNvb2tlZCIsImdyYW1zIjoxNTAsImtjYWwiOjI0OCwicHJvdGVpbiI6NDYuNSwiZmF0Ijo1LjQsImNhcmJzIjowLCJmaWJlciI6MH0seyJuYW1lIjoiV2hpdGUgcmljZSwgY29va2VkIiwiZ3JhbXMiOjIwMCwia2NhbCI6MjYwLCJwcm90ZWluIjo1LjQsImZhdCI6MC42LCJjYXJicyI6NTQuOCwiZmliZXIiOjEuMn0seyJuYW1lIjoiVGVyaXlha2kgc2F1Y2UiLCJncmFtcyI6MzAsImtjYWwiOjI2LCJwcm90ZWluIjowLjksImZhdCI6MCwiY2FyYnMiOjUuNiwiZmliZXIiOjAuMX1dfQ==

CONVERTING A TABLE THE USER ALREADY HAS
- Do not re-estimate. Keep their numbers. Only fill a value yourself if a
  required field is missing.
- type: one row / one item => "food"; several component rows => "dish".
- For a "dish", map one table row to one schema ingredient (row's food name =>
  name, row's portion / serving / weight column => grams). If a row lists
  per-100 g values, multiply by grams / 100 to get portion totals.
- For a "food", the single row's portion column is grams, its values are the
  top-level totals.
- If the source uses a US "Total Carbohydrate" figure that includes fiber,
  subtract the fiber row so "carbs" is net: carbs = total_carbohydrate - fiber.
  EU labels and Open Food Facts already list carbs net of fiber - use as-is.
- fiber missing => omit it. pieces only if the user gave a count.
- If the table has per-100 g numbers and no portion column at all, ask the user
  for the portion weight rather than guessing.

OUTPUT RULES
- Emit exactly one "noshery1:" line. Nothing after it: no trailing sentence, no
  closing text on that line.
- All prose (assumptions, the estimate, any table) goes ABOVE the code line.
- A bare line is preferred; a line wrapped in a plain triple-backtick fence is
  also accepted by the app.
- If you cannot estimate with any real confidence, say that plainly and ask for
  the missing detail instead of emitting a code with invented numbers.

Two example codes

Paste either line into Noshery's "Paste AI estimate" to see how the review screen looks.

noshery1:eyJub3NoZXJ5IjoxLCJ0eXBlIjoiZm9vZCIsIm5hbWUiOiJSYXcgYXBwbGUiLCJncmFtcyI6MTgwLCJrY2FsIjo5NCwicHJvdGVpbiI6MC41LCJmYXQiOjAuMywiY2FyYnMiOjIwLjYsImZpYmVyIjo0LjR9
noshery1:eyJub3NoZXJ5IjoxLCJ0eXBlIjoiZGlzaCIsIm5hbWUiOiJDaGlja2VuIHJpY2UgYm93bCIsImluZ3JlZGllbnRzIjpbeyJuYW1lIjoiQ2hpY2tlbiBicmVhc3QsIGNvb2tlZCIsImdyYW1zIjoxNTAsImtjYWwiOjI0OCwicHJvdGVpbiI6NDYuNSwiZmF0Ijo1LjQsImNhcmJzIjowLCJmaWJlciI6MH0seyJuYW1lIjoiV2hpdGUgcmljZSwgY29va2VkIiwiZ3JhbXMiOjIwMCwia2NhbCI6MjYwLCJwcm90ZWluIjo1LjQsImZhdCI6MC42LCJjYXJicyI6NTQuOCwiZmliZXIiOjEuMn0seyJuYW1lIjoiVGVyaXlha2kgc2F1Y2UiLCJncmFtcyI6MzAsImtjYWwiOjI2LCJwcm90ZWluIjowLjksImZhdCI6MCwiY2FyYnMiOjUuNiwiZmliZXIiOjAuMX1dfQ==

Wkrótce: serwer MCP dla Noshery

Kody importu to jednokierunkowy most typu kopiuj-wklej. Planowany serwer MCP to wersja dwukierunkowa: serwer Model Context Protocol, oparty na tym samym projekcie Appwrite co synchronizacja z chmurą, który pozwala asystentowi AI czytać dane Twojego pulpitu, produkty i dania oraz dodawać wpisy bezpośrednio, a aplikacja podchwytuje zmianę. Jest w planach; bez daty. Śledź tę stronę lub pozycje „Wkrótce" w aplikacji.