Where your stock lives: the Grocy backend and the storage buckets it's grouped into.
Grocy is the open-source inventory app that stores your stock, storage locations, and consumption history. Pantry Raider reads and updates it through Grocy's API, so it needs the Grocy address and an API key. Connect to a Grocy instance running on your network or server.
Add storage buckets beyond the four built-ins (Refrigerated, Frozen, Room Temp, Pantry), e.g. Wine Cellar, Garage Fridge, Liquor Cabinet. Each maps to a Grocy location; assign items to it from the Move button on the Inventory page. Saved separately from the main settings: use Save categories below.
How items get into the pantry: the barcode scanner, barcode enrichment, and the AI models that read your food photos and receipts.
A USB or Bluetooth scanner plugged into any device (this server, a Pi host, or a Pi Remote) works on the Manage Pantry page automatically, all at once, alongside the in-browser camera scanner. USB and Bluetooth HID scanners act as keyboard wedges, so no drivers are needed. This setting is just a hint for which method to reach for first; it does not turn the others off.
Plug in the scanner and test below: click the field and scan a barcode.
Running a Waveshare scan-engine module on a kiosk? See the hands-free setup codes to make it scan on sight without the button.
Camera scanning runs in the browser, so make sure this site has camera permission.
Analyzes food photos, receipts, and photographed recipes. Keys entered here are saved per provider so you can switch freely.
docker compose --profile with-ollama up -d, then pull a vision model.Open Food Facts names are often messy ("zero sugar" for Dr Pepper Zero). LLM enrichment cleans up the name, category, storage, and shelf life per scan, one small text call.
Tokens your AI provider has used through this app. For your own API key you can set a monthly token budget; when it is reached, AI photo import and barcode enrichment are declined until the next month or you raise it. 0 = no budget.
Your optional Forager account: sign in for hands-off photo, receipt, and barcode scanning, see your plan and usage, and turn on remote access so you can reach your kitchen from anywhere.
Pantry Raider is free and open source: bring your own AI key and it works forever, no account needed. Forager is the optional convenience plan: sign in and photo analysis, receipt reading, and barcode enrichment are handled for you, with nothing else to set up. Every account starts with a 30 day free trial.
Already signed in on the Forager website? Generate a pairing code there and enter it here instead.
Reach your kitchen from anywhere, not just on your home network, without opening ports on your router. Cloudflare Tunnel is free and do-it-yourself: you run a small cloudflared helper on this host. Forager is included with a plan: turn it on and your kitchen gets a web address you can share, with nothing to set up. Remote access needs a login password set under Settings, Security, so your kitchen stays private once it is reachable from the internet.
How "What can I cook?" picks and ranks recipes: your pantry staples, your tastes, and the kitchen you cook in.
How the app looks everywhere: the colour theme, an optional background photo, and which pages appear in the navigation.
Choose the colour theme for the whole app. Applies on every page and device (it's stored on the server). The "fun" themes use locally-bundled Bootswatch styles (no external requests).
Pick your own colours, give the theme a name, then Save. It joins the list above and applies immediately. Choose a light or dark base, then tweak the five swatches.
Paint a photo behind the whole app. Upload an image or paste a URL, then use the opacity slider so it stays subtle enough to read over. Applies on every page and device.
Drag a row to re-order it, or use the up and down buttons. Drop a tab onto another top-level tab (or use the indent button) to nest it, which turns the parent into a dropdown submenu; outdent to bring it back to the top level. Add a heading to make a folder that groups tabs but has no page of its own. Hide the tabs you don't use with the switch. Tabs for services that aren't configured (e.g. Mealie pages) hide automatically, and every page stays reachable by direct URL.
Links to the world around the app: Mealie and the recipe sources, Home Assistant, camera feeds, and the "add from your phone" QR code. Remote access lives under Settings, Forager.
Enables the Recipes, Cook, Meal Plan, and Shopping pages.
"What can I cook?" can pull recipe ideas from the web in addition to your Mealie library. Picked recipes are saved into Mealie.
Create a token in Home Assistant under your profile, Security, Long-lived access tokens, then paste it here. The URL and token power the Stream Deck Home Assistant keys and the camera discovery on the Cameras page.
Show messages and camera pop-ups pushed from Home Assistant on this device's screen
(the kiosk and any open browser tab). A Home Assistant automation calls Pantry Raider with a rest_command,
for example to pop up the doorbell camera when a person is detected.
This device's URL is filled in below. Paste an API key from
Settings > Security & Access
where the placeholder is, then add this to your Home Assistant configuration.yaml:
rest_command:
foodassistant_notify:
url: "http://THIS-DEVICE:9284/events/notify"
method: POST
headers:
X-API-Key: "YOUR_FOODASSISTANT_API_KEY"
content_type: "application/json"
payload: '{"title":"","message":"","level":""}'
foodassistant_camera_popup:
url: "http://THIS-DEVICE:9284/events/camera-popup"
method: POST
headers:
X-API-Key: "YOUR_FOODASSISTANT_API_KEY"
content_type: "application/json"
payload: '{"camera":"","seconds":}'
Then an automation, for example pop up the door camera on a person:
automation:
- alias: "Person at door -> pop up camera"
trigger:
- platform: state
entity_id: binary_sensor.front_door_person
to: "on"
action:
- service: rest_command.foodassistant_camera_popup
data:
camera: "Front Door"
seconds: 20
The camera name must match one configured on the Cameras page. Notifications take message, optional title, and level (info/success/warning/error).
The camera cards below feed the on-screen Camera page and, when a Stream Deck is connected, a snapshot key or the full-deck overlay. Add cameras from Home Assistant, by IP, or by hand.
Build the stream and snapshot URLs for a network camera from its address. Pick the closest brand template, fill in the address and any login, then add it. You can edit the generated URLs below before saving. Note: RTSP-only cameras cannot play in a browser or on the deck; use a camera that also offers an MJPEG stream or a JPEG snapshot, or run an RTSP-to-HLS bridge and paste that .m3u8 URL by hand.
Stream URL is the live feed (an .m3u8 HLS stream or an MJPEG URL); Snapshot URL is a still image. Use Discover from Home Assistant to pull cameras from the connected instance, add one by IP above, or fill a row by hand. The house button on a row fills both URLs from its Home Assistant entity.
The Manage Pantry page shows an "Add items from your phone" QR code so a phone can add items without typing an address. Pick which address it encodes.
Who can reach the app and how login is protected.
A UI password is required by default. Turn off Require authentication only when an outer layer already gates access, such as a reverse proxy (Pangolin, Authelia, Cloudflare Access) or the Home Assistant add-on, which authenticates through HA itself.
Add a second step to the device password: a 6-digit code from an authenticator app (Google Authenticator, Authy, Bitwarden, 1Password, and others). Works offline, with no email or text message. Signing in from outside your home network always asks for it.
Scan with your authenticator app, then enter the code to confirm.
settings.json is written with owner-only permissions (0600).Save your data off-box and keep the app up to date.
Pantry Raider's data directory (settings, database, staples list) as a zip.
Grocy and Mealie data live in separate containers: use
scripts/backup.sh on the host for a full snapshot.
rclone.conf is omitted) so the
file is safe to store off-box; after restoring you re-enter keys here. Only include them if the
destination is trusted.docker exec foodassistant-service rclone config.
Config is stored at /app/data/rclone.conf.pantryraider-backups folder on it, on a schedule or on demand. The drive just needs
to be formatted and mounted; the newest 14 backups are kept, and nothing else on the drive is
touched.Check for a newer version and install it. Update now downloads the latest version and restarts the app. If automatic updates are turned off, use the commands below instead.
docker compose pull
docker compose up -d
git pull && docker compose up -d --build serviceMaintenance that is not day-to-day: the timezone, reloads and reboots, diagnostics, and switching this device's role.
Turn on debug logging to capture detailed logs for troubleshooting, then download them to share with support. Logs are written to a rotating file on this device and any saved API keys or passwords are redacted from the download.
This device's hardware and links, plus any Pi Remote satellites that pull their config from this server. Each satellite checks in on every config sync, so the list updates itself.
Scan your local network for Pantry Raider instances that have not checked in yet. Leave the range blank to scan this server's own subnet.
An optional full-screen launcher that works like an on-screen Stream Deck. It opens at /ui/start and replaces the fixed and floating menus while shown. The app opens on whatever page leads the navigation menu, so with Start at the top of the menu (where it sits by default once enabled) the Start Page is this device's home screen.
How the app behaves on a screen: the on-screen navigation bar and quiet mode. Panel, sleep, and screensaver settings appear here on a device with an attached display.
Dims the page to a floating clock after inactivity. It normally runs only on a kiosk display; the switch below extends it to every browser viewing this install.
An optional fixed bar of nav icons docked to a screen edge, handy on touch screens. It reserves space so it never overlaps the page. Bottom is a horizontal bar; left and right are vertical. The setting below is the default for devices that haven't been customised on this device.