Anyone who opens dino or pixel_sim_demos from either gallery gets a black
rectangle and no way to tell it apart from a page that failed — both cards
report themselves healthy while drawing nothing. They are the only two cards
that go through utils/pixel_sim, and they are blank on both runtimes, so
this is the simulated LED matrix, not the Pyodide or WebAssembly host.
Measured on the published site, 2026-09-22, headless Chromium from
pydevices-examples/.venv, 30 s after network-idle:
| card |
page |
data-runtime-state |
#display_canvas |
dino |
pyscript/pyodide.html?modules=dino&deps=pydevices-pygraphics |
ready |
480x320, non-black pixels 0 |
dino |
gallery/micropython.html?modules=dino |
ready |
480x320, non-black pixels 0 |
pixel_sim_demos |
pyscript/pyodide.html?modules=pixel_sim_demos&deps=pydevices-palettes,pydevices-pygraphics |
ready |
480x320, non-black pixels 0 |
pixel_sim_demos |
gallery/micropython.html?modules=pixel_sim_demos |
ready |
480x320, non-black pixels 0 |
No page error, no failed request, no exception in the on-page console. The log
ends exactly where success would end:
Initializing PSDisplay...
PSDisplay: initialized.
PSDisplay.rotation(): Setting rotation to 90
done setting rotation
Initializing SimPixelDisplay...
SimPixelDisplay: initialized.
So the rotation to 480x320 happens, SimPixelDisplay constructs, and then
nothing reaches the surface. dino ends on app.every(_tick, period=FRAME_MS, async_=app.timer_async) followed by one game.draw(); worth checking whether
that first draw reaches the canvas at all and whether the periodic tick ever
fires under either host, before looking at the game logic.
The other 54 Pyodide cards paint (#134), so nothing about the shared loader
path is implicated.
Anyone who opens
dinoorpixel_sim_demosfrom either gallery gets a blackrectangle and no way to tell it apart from a page that failed — both cards
report themselves healthy while drawing nothing. They are the only two cards
that go through
utils/pixel_sim, and they are blank on both runtimes, sothis is the simulated LED matrix, not the Pyodide or WebAssembly host.
Measured on the published site, 2026-09-22, headless Chromium from
pydevices-examples/.venv, 30 s after network-idle:data-runtime-state#display_canvasdinopyscript/pyodide.html?modules=dino&deps=pydevices-pygraphicsreadydinogallery/micropython.html?modules=dinoreadypixel_sim_demospyscript/pyodide.html?modules=pixel_sim_demos&deps=pydevices-palettes,pydevices-pygraphicsreadypixel_sim_demosgallery/micropython.html?modules=pixel_sim_demosreadyNo page error, no failed request, no exception in the on-page console. The log
ends exactly where success would end:
So the rotation to 480x320 happens,
SimPixelDisplayconstructs, and thennothing reaches the surface.
dinoends onapp.every(_tick, period=FRAME_MS, async_=app.timer_async)followed by onegame.draw(); worth checking whetherthat first draw reaches the canvas at all and whether the periodic tick ever
fires under either host, before looking at the game logic.
The other 54 Pyodide cards paint (#134), so nothing about the shared loader
path is implicated.