10 Commits

Author SHA1 Message Date
Adolfo Reyna 214287193e feat(bibleverse): editorial v6 - Georgia Italic serif pretty font, 15px lift, menu auto-show 10s, animated book picker, no black bar
Main / Build (BookPlayer) (push) Has been cancelled
Main / Build (Brainfuck) (push) Has been cancelled
Main / Build (Breakout) (push) Has been cancelled
Main / Build (Calculator) (push) Has been cancelled
Main / Build (Diceware) (push) Has been cancelled
Main / Build (EpubReader) (push) Has been cancelled
Main / Build (GPIO) (push) Has been cancelled
Main / Build (GraphicsDemo) (push) Has been cancelled
Main / Build (HelloWorld) (push) Has been cancelled
Main / Build (M5UnitTest) (push) Has been cancelled
Main / Build (Magic8Ball) (push) Has been cancelled
Main / Build (MediaKeys) (push) Has been cancelled
Main / Build (MystifyDemo) (push) Has been cancelled
Main / Build (SerialConsole) (push) Has been cancelled
Main / Build (Snake) (push) Has been cancelled
Main / Build (TamaTac) (push) Has been cancelled
Main / Build (TodoList) (push) Has been cancelled
Main / Build (TwoEleven) (push) Has been cancelled
Main / Bundle (push) Has been cancelled
- Pretty font: embedded LVGL C Georgia Italic 26/22/20/18/16 + regular 24 (lv_font_conv --lv-include lvgl.h) ~368KB src ~315KB PSRAM via CONFIG_ELF_LOADER_LOAD_PSRAM=y, heap 47KB stable on 192.168.68.129 0.8.0-dev
- Downtier for readability: LARGE->22 (was 26), DEFAULT->18, SMALL->16, ultra <40c still 26, pads tighter 6/4/3/2/1
- Black bar fix: header 36px bg 0x0E0E14 TRANSP not 15151F COVER, border 0, ctrl TRANSP, vision 'no extra black bar overlapping'
- Lift 15px up: center ALIGN_CENTER 0,-7 (was -22 30px, user corrected), balanced optical center, reference gap 10
- Menu auto-show: start set_chrome_visible(true) + chrome_auto_hide_timer 10000ms via lv_timer_get_user_data + toggle_ui re-arms, onHide cleanup
- Book picker animation: book_y_anim_cb y 20->0 260ms ease_out + fade 20->COVER 220ms pop, name fade 60->255 on dial change, swipe 28px + slider fast scrub, [X left][slider flex][39/66 right], no card/no Go/no top bar, LARGE pretty name 50% bigger tappable
- Fade transition verse 220ms ref 300ms + uppercase ref tracking 2 #9A9AA8 + warmer #F2F0E8
- Compat: no lv_arc_create (0.7 fleet), 0 missing LVGL syms undef=0, build 4.3M
- Skill docs: SKILL.md v6 black-bar+downtier+auto-hide+anim, pretty-font.md v6, immersive-ui.md v6

Screenshots: Zephaniah 1:3 8683 bytes menu visible (top ref + bottom pills), after 6882 immersive, Habakkuk 2:9 no crop vision PASS
Co-Authored-By: internal-model
2026-07-12 12:07:04 -04:00
Adolfo Reyna 9773a78f6b rlcd: fix Mp3Player pop/repetition and VoiceRecorder mic pitch
- Mp3Player: increase task stack 4096->6144, prio 5->6, remove taskYIELD causing audio gaps
- VoiceRecorder: configure I2S as stereo for ES7210 (dual mic) like working MicroPython,
  then downmix left channel to mono WAV to fix low-pitch mic-like recording
2026-07-11 23:54:17 -04:00
Adolfo Reyna e9c396df66 feat(BibleVerse): immersive offline bible app - ESP32 color screen
- Single verse fullscreen, auto-advances every minute, tap toggles chrome
- Offline WEB bible split per-book: books.json + 66 bin/idx pairs (~4.1MB)
  - bin = NUL-terminated UTF-8 concatenation, idx = {offset,cnum,vnum}
  - RAM tiny: loads one book at a time, biggest Psalms ~215KB vs 3.8MB monolith
- Adaptive text scaling by length: <40 ultra-large (Jesus wept), <100 large,
  100-200 default, 200-350 small, 350+ compact (Esther 8:9 492c)
- Persistence via user_data_path: progress.txt + favorites.txt (like BookPlayer)
- LVGL fixes: use lvgl_get_text_font(FONT_SIZE_*) - direct montserrat not exported,
  no gradients (bg_grad_color not exported), LV_OPA_95 -> OPA_COVER, format-truncation werror silenced
- Deploys to 192.168.68.112 via PUT /api/apps/install (dashboard port 80, dev 6666 closed)

Tested: build esp32s3 local-sdk 0 missing symbols, 4.2MB .app, screenshot Gen 2:10

Refs: tools/convert_bible.py regenerates assets from WEB source
2026-07-11 17:08:22 -04:00
Adolfo Reyna 12e99f896a perf: Rate-limit progress bar updates to prevent redundant layout invalidation and redraws 2026-07-09 22:27:44 -04:00
Adolfo Reyna efea28e5d6 feat: Add BookPlayer app and update CI build matrix 2026-07-08 23:20:03 -04:00
Adolfo Reyna 364dc6b2f7 fix(reynabot): Replace unsupported Unicode emojis with custom girl/boy PNG assets 2026-07-01 22:56:31 -04:00
Adolfo Reyna 5eb9620468 feat(reynabot): Show dedicated speaker selection screen on launch 2026-07-01 22:51:23 -04:00
Adolfo Reyna 6bf06c8867 feat(reynabot): Add speaker selection buttons for Grace and Elias 2026-07-01 22:43:36 -04:00
Adolfo Reyna a4be0d73ae feat(reynabot): Improve UI and update voice endpoint to kids gateway 2026-07-01 13:45:04 -04:00
Adolfo Reyna 98ae52d3a8 Implement Mp3Player dynamic application 2026-06-28 22:22:57 -04:00
172 changed files with 18157 additions and 1 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
Build:
strategy:
matrix:
app_name: [Brainfuck, Breakout, Calculator, Diceware, EpubReader, GPIO, GraphicsDemo, HelloWorld, M5UnitTest, Magic8Ball, MediaKeys, MystifyDemo, SerialConsole, Snake, TamaTac, TodoList, TwoEleven]
app_name: [Brainfuck, Breakout, BookPlayer, Calculator, Diceware, EpubReader, GPIO, GraphicsDemo, HelloWorld, M5UnitTest, Magic8Ball, MediaKeys, MystifyDemo, SerialConsole, Snake, TamaTac, TodoList, TwoEleven]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
+16
View File
@@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.20)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
if (DEFINED ENV{TACTILITY_SDK_PATH})
set(TACTILITY_SDK_PATH $ENV{TACTILITY_SDK_PATH})
else()
set(TACTILITY_SDK_PATH "../../release/TactilitySDK")
message(WARNING "TACTILITY_SDK_PATH environment variable is not set, defaulting to ${TACTILITY_SDK_PATH}")
endif()
include("${TACTILITY_SDK_PATH}/TactilitySDK.cmake")
set(EXTRA_COMPONENT_DIRS ${TACTILITY_SDK_PATH})
project(BibleVerse)
tactility_project(BibleVerse)
+84
View File
@@ -0,0 +1,84 @@
# BibleVerse for Tactility
Single-verse bible reader. Shows one verse fullscreen, auto-advances every minute. Tap to toggle controls.
## UX
- **Default view (no chrome)**: immersive context — just the verse text + reference, centered, large font. Like BookPlayer image-only view.
- **Tap**: shows header (current ref + position) and footer controls:
- Close X, Prev, Pause/Play (auto-advance), Next, Highlight (star), Audio memo placeholder.
- Highlighted verses saved to `favorites.txt` in app user data. Long-term: record voice memo, read aloud TTS.
## Bible data format (split per book)
We fetch public domain bibles from https://github.com/sajeevavahini/bibles (Zefania XML).
Offline conversion:
```
python3 tools/convert_bible.py --src "World English Bible.xml" --dst assets/bible
```
Result structure:
```
assets/bible/
books.json # {"books":[{"bnumber":1,"bname":"Genesis","verses":1533,...}], total_verses, translation, version}
01.bin / 01.idx # Genesis
02.bin / 02.idx # Exodus
...
66.bin / 66.idx
```
- `.bin`: concatenated NUL-terminated UTF8 verse texts. No parsing needed, low RAM.
- `.idx`: header 10 bytes: magic 'BIBK', uint16 version, uint32 count. Then per entry 8 bytes: uint32 offset, uint16 cnum, uint16 vnum.
This split makes memory footprint tiny for ESP32:
- Only one book loaded at a time (max ~215KB for Psalms, typical 12-100KB).
- Index ~19KB max for Psalms, typically <5KB.
## SD card fallback
App also scans:
- `/sdcard/bibles/` and `/sdcard/bible/`
If `books.json` not found in assets, it will try to use SD folder. This lets users drop extra translations offline.
## Settings persistence
Same pattern as EpubReader / BookPlayer (but those two didn't persist in BookPlayer, EpubReader does):
Using Tactility app user data paths:
- `tt_app_get_user_data_path()` -> e.g. `/sdcard/user/app/one.tactility.bibleverse`
- `progress.txt`: stores global verse index + b/c/v for debug
```
1234
1 1 1
0 0
```
- `favorites.txt`: list of global indices, one per line.
This lives on SD card (or internal data partition), survives app reinstalls.
## Build (color screen device, esp32s3)
Same as BookPlayer — external app, compiled for esp32s3 target (covers CYD-2432s028r, m5stack-cores3, etc).
```bash
# source IDF (example)
source ~/esp/esp-idf/export.sh
export TACTILITY_SDK_PATH=/path/to/TactilitySDK # or use --local-sdk
python3 tactility.py Apps/BibleVerse build esp32s3 --local-sdk
```
Output: `build/BibleVerse.app` installable via Tactility file manager or `tactility.py ... install <ip>`
## Future extensions
- Voice memo: record to `/sdcard/bible_memos/<global>.wav` using same I2S code as BookPlayer
- TTS read aloud: use esp tts or pre-generated mp3 like BookPlayer pages
- Book picker UI (like BookPlayer picker but for bible books)
- Highlight color, search, jump to reference dialog
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More