ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
반이 끝까지 보고 싶은 역사 수업으로 실제 그림, 내레이션, 스스로 끝내는 게임을 어디서든 플레이합니다
History lessons your class wants to see the end of. Real paintings, a narrated story, and a game they finish themselves. Built in minutes, plays anywhere.
교육GitHub @bartslot온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Narrated history lessons for the classroom. Laravel 12 + Livewire 3. The product of The Learning Portal (thelearningportal.us).
composer install
npm install
cp .env.example .env
php artisan key:generate
touch database/database.sqlite
php artisan migrate --seed
php artisan storage:link
npm run build # or: npm run dev
./scripts/fetch-public-assets.sh # pulls flag tiles from the live site
composer dev # serves app + queue + vite + logs
Large binary assets are gitignored. Status for a fresh clone:
./scripts/fetch-public-assets.sh from the live site.public/avatars/*/character.glb, ~447 MB) and the
animation library (~391 MB) are not hosted online and are not
included. A clone renders avatar thumbnails but not the 3D avatars; these
assets must be transferred separately.public/build, public/hot, public/storage are regenerated by the
npm run build and php artisan storage:link steps above.Backgrounds are sourced from the paintings corpus and Wikimedia Commons, never generated. Originals arrive at up to 3840px and 1.7–3 MB, so every one is resized to fit a 1920×1080 stage and squeezed under 100 KB as it is downloaded. Across the eight heaviest backgrounds in a real install that took 73 MB down to 759 KB.
Encoding is AVIF. At the same visual quality WebP needed more than twice the bytes. An image with no real transparency has its alpha channel dropped rather than carrying a plane that says "all opaque".
Tunable in .env — BACKGROUND_MAX_BYTES, BACKGROUND_MAX_WIDTH, BACKGROUND_MAX_HEIGHT,
BACKGROUND_START_QUALITY, BACKGROUND_GRAIN_PRESET, AVIFENC_PATH.
Lessons built before this existed can be re-encoded in place. Originals are kept as bg.original.*
until you ask for them to go:
php artisan lessons:optimise-backgrounds --apply
The grain is not painted into the pixels. avifenc writes about a hundred bytes of AV1
film-grain parameters into the bitstream and the decoder draws the grain as it paints the image.
Baked-in noise would wreck compression — noise is precisely what a codec cannot predict — while the
parameter set is free and leaves a smooth, cheap image underneath. It also covers the banding heavy
compression leaves in skies and shadows, which is what lets an aggressively compressed backdrop
still look filmic instead of blotchy.
Measured here: preset 1 cost 111 bytes over the same encode with no grain, and in Chrome the decoded gradient went from a neighbour-pixel delta of 0.0009 to 3.28 — the browser really is synthesising it, not ignoring the parameters.
Encode a single file:
./scripts/encode-avif-grain.sh --quality 65 --speed 6 --grain 1 source.png public/images/source.avif
Render every built-in preset from one source, for visual comparison:
./scripts/test-avif-grain-presets.sh source.png tmp/grain-tests
Presets 1–16 are different grain models, not a weak-to-strong dial — pick one by looking at skies, shadows and gradients at 100% zoom, not by reaching for the highest number. Preset 0 writes an honest no-grain baseline to compare against.
Grain is applied to the colour planes only (color: scope); alpha is preserved and never grained,
because grain on a transparency mask makes the edges of a cut-out crawl.
Requires avifenc built with AOM — brew install libavif on macOS, or your distribution's
libavif/libavif-tools package built against libaom. Without it the app falls back to Imagick AVIF
(no grain) and then WebP, so nothing breaks; you just lose the grain. Anything that decodes and
re-encodes the file downstream — a CDN, an image optimiser — will discard the grain parameters, so
check the asset as actually served.
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
Laravel is accessible, powerful, and provides tools required for large, robust applications.
Laravel has the most extensive and thorough documentation and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out Laravel Learn, where you will be guided through building a modern Laravel application.
If you don't feel like reading, Laracasts can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel Partners program.
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the Laravel documentation.
In order to ensure that the Laravel community is welcoming to all, please review and abide by the Code of Conduct.
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [email protected]. All security vulnerabilities will be promptly addressed.
The Laravel framework is open-sourced software licensed under the MIT license.