How kirmisaki/framefilm works
FrameFilm combines ESP32 display firmware, companion photo-transfer tools, and Film-hub cloud management. The main device workflow is converting an image to Film, sending it over BLE or WiFi, storing and displaying it on the frame; Film-hub adds device registration, albums, templates, scheduled streams, and AI-assisted content. Firmware internals are sampled unevenly, so links from BLE command handling to file/OTA services are shown where calls are visible; other documented but unsampled capabilities are represented without speculative implementation links.
Main entry points: main.py Film-hub API · service_ble.c BLE service · app.js WeChat mini-program · main.js ForFilm interface
Components 30
Device firmware
- Firmware startup
firmware/frame_film/main/main.c - System services
firmware/frame_film/components/film_sys/src/sys_init.c - BLE service
firmware/frame_film/components/film_service/src/service_ble.c - GATT transport
firmware/frame_film/components/film_service/src/service_ble_gatts.c - Film file service
firmware/frame_film/components/film_service/src/service_file.c - Film playback
firmware/frame_film/components/film_service/src/service_film.c - Firmware updates
firmware/frame_film/components/film_service/src/service_ota.c - WiFi delivery
firmware/frame_film/components/film_service/src/service_wifi.c - Device settings
firmware/frame_film/components/film_service/src/service_param.c - Hardware abstraction
firmware/frame_film/components/film_hal - E-paper display
firmware/frame_film/components/film_hal/src/hal_epd_368.c - SD storage
firmware/frame_film/components/film_hal/src/hal_sd.c
Film-hub backend
- Film-hub API
server/backend/app/main.py - Authentication
server/backend/app/api/auth.py - Hub API domains
server/backend/app/api - Hub database
server/backend/app/db.py - Domain records
server/backend/app/models - Built-in templates
server/backend/app/services/builtin_templates.py - AI integration
server/backend/app/services/ai_client.py
Web companion
- ForFilm interface
tools/ForFilm/js/main.js - Film conversion
tools/ForFilm/js/convert.js
WeChat companion
- WeChat mini-program
tools/wechart/miniprogram/app.js - Phone BLE utilities
tools/wechart/miniprogram/utils/ble-utils.js - Film utilities
tools/wechart/miniprogram/utils/film-utils.js
Other components
- FrameFilm owner
- Hub administrator
- Browser user
- Phone user
- FrameFilm device
- Film-hub service
Connections 29
- FrameFilm owner → ForFilm interface: converts photos
README.md - ForFilm interface → Film conversion: uses conversion
- ForFilm interface → FrameFilm device: transfers by BLE
README.md - FrameFilm owner → WeChat mini-program: creates and sends
README.md - WeChat mini-program → Phone BLE utilities: imports
tools/wechart/miniprogram/app.js - WeChat mini-program → Film utilities: uses Film helpers
- WeChat mini-program → FrameFilm device: transfers by BLE
README.md - FrameFilm device → Firmware startup: runs firmware
README.md - Firmware startup → System services: initializes
firmware/frame_film/main/main.c - System services → BLE service: starts services
- BLE service → GATT transport: initializes transport
firmware/frame_film/components/film_service/src/service_ble.c - BLE service → Film file service: saves transfers
firmware/frame_film/components/film_service/src/service_ble.c - BLE service → Firmware updates: starts updates
firmware/frame_film/components/film_service/src/service_ble.c - WiFi delivery → Film file service: downloads Film
firmware/frame_film/components/film_service/src/service_wifi.c - Film file service → SD storage: uses storage
- Film playback → E-paper display: renders on
- Hardware abstraction → E-paper display: provides display
README.md - Hardware abstraction → SD storage: provides storage
README.md - Hub administrator → Film-hub API: manages content
README.md - Film-hub API → Authentication: mounts routes
server/backend/app/main.py - Film-hub API → Hub API domains: mounts routes
server/backend/app/main.py - Authentication → Hub database: gets database session
server/backend/app/api/auth.py - Hub database → Domain records: loads models
server/backend/app/db.py - Film-hub API → Built-in templates: seeds templates
server/backend/app/main.py - Hub API domains → Film-hub service: provides device and content APIs
README.md - Film-hub service → WiFi delivery: pushes content by WiFi
README.md - Film-hub API → AI integration: supports AI features
README.md - Film-hub service → FrameFilm device: registers and serves device
README.md - Browser user → Film-hub API: administers hub
README.md