ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Type an ODE or PDE and watch it move: springs, pendulums, orbits, strings, membranes and heat, rendered as holograms.
Translation pending
EducationJavaScript · CSSGitHub @TakoodachiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Type an ODE or PDE and watch it move as a hologram-style physical model
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Type a differential equation and watch it move. Holograph turns ODEs and PDEs into hologram-style physical models: springs, pendulums, orbits, strings, membranes and heated plates.
Live site: https://takoodachi.github.io/holograph/
y''+4y=0, u_t = u_xx) or paste LaTeX (\frac{d^2\theta}{dt^2}, \frac{\partial u}{\partial t}, \nabla^2 u).k, \omega, k_1) becomes a slider, like in Desmos.| Equation | Picture |
|---|---|
| 2nd-order ODE | mass on a spring or a pendulum |
| two angles, 2nd order | double pendulum |
| 1st-order ODE | liquid level in a tank |
| 2 unknowns | phase plane with a flowing vector field |
| 3 unknowns | 3D trajectory |
1D PDE (u_t, u_tt) | string or rod with its recent history |
| 2D PDE | wireframe membrane or plate |
| any equation | Time axis: the solution against t, computed ahead into the far future |
The Time axis view runs a second copy of the simulation ahead of the live one. Its condense slider goes from a linear window (t from 0 to 20) to all of time squeezed onto the axis, with ∞ at the end. A motion that keeps going forever, like a limit cycle or chaos, shows as a band between its extremes; one that settles shows as a flat line. ODEs plot each unknown against t; PDEs show a space-time surface u(x, t), or the middle slice for 2D problems.
In the view:
Press Space to pause and R to restart.
"Describe it" tries the built-in reader first. When the reader doesn't recognise a description, such as "a ball rolling in a bowl with a little friction", an AI model builds the system instead. Pick the AI in Settings:
| Choice | Model | Key |
|---|---|---|
| Qwen · free (default) | Qwen3 30B, @cf/qwen/qwen3-30b-a3b-fp8, through Holograph's Cloudflare Worker | none |
| Claude (Anthropic) | Claude Opus 5.5, claude-opus-5-5 | yours, from console.anthropic.com |
| GPT (OpenAI) | GPT-6 Astra, gpt-6-astra | yours, from platform.openai.com |
| Gemini (Google) | Gemini 4 Argon, gemini-4-argon | yours, from aistudio.google.com |
To use your own key, create one with your provider, give it a low monthly spend limit, pick the provider in Settings and paste the key. To get the AI's version of a description the reader already handled, click Ask … instead.
What to know:
fallbacks: "default" option). A refusal from any provider shows as a message.js/ai.js holds one entry per provider. Claude uses Anthropic's official SDK (@anthropic-ai/sdk, loaded from jsdelivr through the import map only on first use, with dangerouslyAllowBrowser: true). The others share one fetch call in the Chat Completions format: GPT directly, Gemini through its OpenAI-compatible endpoint, and Qwen through the Worker, which answers in the same shape. Another OpenAI-compatible provider is one more entry.
Every provider gets the same system prompt and structured-output JSON schema from js/prompt.js. The prompt lists exactly what js/parse.js accepts. The schema returns params and ic as lists of entries, because it can't express free-form maps, and every field is required with the optional ones nullable, because OpenAI's strict mode demands that. Qwen on Workers AI doesn't enforce a schema, so the Worker puts the schema in the prompt, and the app pulls the JSON out of the reply (skipping any reasoning or code fences) before checking it.
worker/ is a Cloudflare Worker on the free Workers plan, so it can't run up a bill: past the daily allowance, Workers AI refuses requests until midnight UTC. It holds no secret (the model is reached through the Workers AI binding), only answers requests from takoodachi.github.io and localhost:5173, and always runs Holograph's own prompt, so it can't be used as a general chatbot. A KV namespace counts each visitor's requests per day.
To deploy your own copy:
Create a free Cloudflare account.
Log in and deploy from worker/. The first deploy creates the KV namespace; put its id in wrangler.jsonc.
npx [email protected] login
npx [email protected] deploy
Put the Worker's address in PROVIDERS.qwen.url in js/ai.js, and your site's address in ORIGINS in worker/index.js.
tests/ai.test.js mocks each API and covers the validation, the retry, refusals and API errors. tests/worker.test.js runs the Worker with Workers AI and KV faked.
It's a static site with no build step. The libraries (three.js, MathLive, math.js) load from a CDN.
python -m http.server 5173
Then open http://localhost:5173.
npm install
npm test
The tests cover:
js/parse.js converts LaTeX or plain text into a classified model and compiles it to fast JavaScript. Equations are linear in their highest derivatives, so a small linear solve handles coupled systems.js/solver.js runs RK4. Each step size is set from a power-iteration estimate of the system's stiffness. PDEs use finite differences with ghost cells for the boundary conditions, and several fields share one state array.js/describe.js turns a description into equations, using a vocabulary of systems, modifiers and quantities with units.js/ai.js is the AI mode (free Qwen, or Claude, GPT or Gemini with your key) for descriptions the built-in reader doesn't recognise; js/prompt.js is what every model is told, and worker/ is the free Qwen's Cloudflare Worker.js/scene.js draws the three.js hologram stage and the physical views.js/app.js handles the editor, sliders and playback. js/presets.js holds the examples.Known limits: