Files
Adolfo Reyna 214287193e
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
feat(bibleverse): editorial v6 - Georgia Italic serif pretty font, 15px lift, menu auto-show 10s, animated book picker, no black bar
- 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
..

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).

# 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