ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Find your place in a Sefer Torah with your phone camera, and navigate to the reading
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Find your place in a Sefer Torah with your phone. Point the camera at the open column and NavTorah tells you the book, parashah, aliyah and verses, and how many columns to move to reach the reading you want. When it isn't sure, it says so instead of guessing.
The app is available in English and Spanish.
Two real tests, recorded with an earlier, Spanish-only version of the app. The previews play at 3x; click one for the full video.Read the full README ↗Find your place in a Sefer Torah with your phone. Point the camera at the open column and NavTorah tells you the book, parashah, aliyah and verses, and how many columns to move to reach the reading you want. When it isn't sure, it says so instead of guessing.
The app is free, with no ads and no sign-up, and available in English and Spanish. The phone reads the photo itself; only the text goes to the server.
Three real tests. The first two were recorded with the current version, which reads the column on the phone; the third, with an earlier Spanish-only version that sent the photo to Claude. The previews play at 3x; click one for the full video.
NavTorah doesn't recognize the image; it locates text. First the column is transcribed, errors and all. A matcher then finds that transcription in the full Torah text (80,316 words) using diagonal voting and banded alignment, with an edit distance that treats common STA"M letter confusions (ב/כ, ד/ר, ה/ח/ת…) as cheap.
The matcher decides, not the model. Confidence comes from the margin between the best and second-best candidate. Repeated passages, like the offerings of the nesiim in Bamidbar 7, come back as ambiguous with both candidates.
Positions are word indexes, so any layout works. On scrolls with the standard 245-column, 42-line layout it also gives the exact column and line.
By default the phone reads the photo itself, with no API and no cost, and sends only the text. Classical image processing (packages/vision) flattens the lighting, finds the column between its blank margins and follows each line across it, through tilt and curvature. A small neural network (a CRNN of 0.45M parameters, run with ONNX Runtime Web) then reads each line. It reads worse than a large vision model, but the matcher doesn't need a perfect reading: letters the network is unsure of come out as ?, which the matcher treats as a wildcard, so it still places the column or says it can't.
The network was trained on synthetic photos of real columns in STA"M fonts, aged and photographed in software; see tools/train. When a scan fails, the app asks whether the person wants to send that photo to improve the reader: real photos are what will help the model most.
Pick a target: the reading for a date, a holiday or special day, a parashah and aliyah, or a verse. The calendar comes from hebcal and handles each year's variants: Rosh Hashanah on Shabbat, chol hamoed, fast days, Rosh Chodesh, and special Shabbatot with a maftir from a second sefer.
After each scan NavTorah says how many columns to move and which way. You can also scan first, without a target: it tells you where the sefer is open, and when you then choose where to go it works out the way from that scan, without scanning again. It counts with the standard 245-column layout, so the count is exact on standard-layout scrolls. On scrolls with another layout it can be off, and the app doesn't detect that yet, so scan again when you get there. Once you're there, it tells you the line and the first words. Instructions can be read aloud.
After each result the app asks "Did it help?". A "no" asks what went wrong and offers to send the photo, unticked by default; after a scan it couldn't place, it offers to send the photo too. A "yes" shows how to support the app: dedicating a week (shown with that Shabbat's parashah) or a jag (shown the week before and during it). People get in touch through the contact you configure, and you add the dedication in the admin panel; the app and the landing page then show who the week is dedicated by.
At /es/admin or /en/admin, with ADMIN_PASSWORD. It shows people and scans per day, how many were placed, ambiguous or not placed, the 👍 and 👎 with their comments and photos, the latest scans with the text that was read, and the dedications, where you add and remove them. Each phone gets a random anonymous id to count people; there are no accounts and no IP addresses are stored.
Requires Docker with Compose. The app, its SQLite database and the photos sent with feedback run in one container, with the data in a volume.
cp .env.example .env # set ADMIN_PASSWORD, CONTACT_EMAIL, CONTACT_WHATSAPP, TZ
docker compose up -d --build
It listens on 127.0.0.1:3000 (BIND_ADDRESS and PORT in .env). Point your reverse proxy there, for example with nginx:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
The proxy must serve HTTPS: phones only open the camera on a secure page. If the proxy runs in another container, set BIND_ADDRESS=0.0.0.0 or put both on the same Docker network. The app limits requests per IP using X-Forwarded-For, so don't expose its port directly to the internet.
This is the beginning of the README. Read the rest at the original. Read the full README ↗