v-modal

Activity

Stars and mentions · Last 30 days, Oct 8 – Nov 6

GitHub stars0
Mentions57
06121824Oct 8Oct 22Nov 6
UTC days · repositories v-modal owns0 repositories

Top repositories

v-modal’s repositories ranked by new forks, as on trending.

Loading

Contributes to

Repositories outside v-modal’s account where v-modal opened or reviewed pull requests in the past 365 days.

Who noticed v-modal

Everyone who starred or forked v-modal’s repositories since the archive began in 2011.

Notable accounts

Ordered by the stars their own repositories have received.

Biggest fans

Accounts that starred the most of these repositories.

Breakout weeks

Each repository’s best week of new stars, with the release published around it.

Mentions

56posts
Nov 70 posts
  1. Offline-First Flutter for Robot Operators and Field Technicians The problem Robots and edge devices may operate in warehouses, factories, outdoors, or labs with unreliable connectivity. A mobile UI that assumes every request succeeds becomes unusable and can misrepresent the robot's state. What this guide covers This tutorial focuses on practical architecture and performance engineering for production systems. The central principle is to measure the complete pipeline, keep latency-sensitive work close to the hardware, and make failure states visible to the operator. Reference architecture Local cache and command outbox → connectivity-aware repository → authenticated gateway → device/robot. Separate safe-to-queue configuration edits from time-sensitive commands that must never be replayed automatically. Implementation plan 1. Classify actions as read-only, safely retryable, or time-sensitive/non-replayable. 2. Cache non-sensitive reference data and show when each value was last refreshed. 3. Use idempotency keys for retryable operations and explicit user confirmation for commands that cannot be safely queued. 4. On reconnect, refresh authoritative device state before enabling actions. 5. Test airplane mode, DNS failure, gateway reboot, and long-lived stale sessions. Example enum RetryPolicy { safeToRetry, refreshBeforeRetry, neverReplay }\n\nclass PendingOperation {\n const PendingOperation({required this.id, required this.policy});\n final String id;\n final RetryPolicy policy;\n} The snippets are illustrative starting points, not drop-in integrations. Match APIs and version requirements to the exact SDK, OS image, hardware revision, and runtime in your project. Performance checklist - Measure end-to-end latency, not only one function or model invocation. - Report p50 and p95/p99 latency alongside throughput, memory use, and dropped work. - Bound queues and define what happens when consumers fall behind. - Avoid repeated frame copies and expensive work on Flutter's UI isolate. - Test sustained workloads after the device reaches thermal equilibrium. - Keep UI state, device state, and robot state distinct. - Add timeouts, cancellation, reconnection, and explicit stale-data indicators. - Profile on the actual target hardware using a reproducible build. Common pitfalls - Never replay motion commands simply because connectivity returned. - Do not present cached telemetry as live without a freshness indicator. - Avoid unlimited local outboxes that can grow during long outages. Hands-on exercise Disconnect the phone during a mock robot task. Verify the app shows stale state, preserves safe notes, and does not replay a movement command. Further reading - [Flutter performance best practices](docs.flutter.dev) - Flutter DevTools - Android Developers - NVIDIA Developer - ROS 2 documentation Useful Links Website: www.v-modal.com SDK Flutter: v-modal/vmodal_sdk_flutter SDK Android: v-modal/vmodal_sdk_android Discord: discord.gg Reddit: reddit.com

  2. Advanced Flutter Profiling for Smart Glasses and Robotics This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. > Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. 1. Define measurable service objectives Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. 2. Instrument the complete path sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See docs.flutter.dev 3. Establish a repeatable baseline 1. Start from a clean launch. 2. Connect to the robot or replay a fixed trace. 3. Run a representative scenario for several minutes. 4. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. 5. Change one variable at a time. 6. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. 4. Separate acquisition from presentation High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. 5. Make buffering bounded Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. - Latest wins: pose, preview frames, current detections. - Drop old items: display-oriented streams where freshness matters. - Persist: events that must survive disconnection. - Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. 6. Protect the Flutter frame budget Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. 7. Keep robotics compute near the robot Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See nvidia-isaac-ros.github.io 8. Treat stale data as a first-class state Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. 9. Validate graceful degradation Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. 10. Release checklist - [ ] Frame-time baseline captured on physical hardware - [ ] p50/p95/p99 event-to-display latency measured - [ ] Queues bounded and overflow observable - [ ] High-frequency state coalesced before UI updates - [ ] Commands and alarms use reliable semantics - [ ] Clock domains and stale-data rules documented - [ ] Network and reconnect behavior tested - [ ] Thermal and memory pressure scenarios tested - [ ] Robot safety remains independent of the mobile app - [ ] Performance budgets enforced in repeatable tests Advanced focus: Profiling workflow Compare UI and raster work in DevTools. Add Timeline spans around parsing, list transformation, and state publication. Detailed tracing can add overhead, so enable it only for focused investigations. Benchmark a repeatable scenario with robot motion, camera preview, and diagnostics active. Fix the largest measured bottleneck first. Implementation exercise 1. Add timestamps and sequence IDs at the gateway boundary. 2. Capture a normal-load trace and a burst-load trace. 3. Implement a bounded buffer and an explicit overload policy. 4. Display stale/disconnected/degraded states separately. 5. Profile on the target device and compare p50, p95, and p99 results. 6. Document which events may be coalesced and which must be preserved. Conclusion The strongest performance gains usually come from controlling the whole data pipeline: acquisition, processing, filtering, transport, state updates, and rendering. Keep compute close to the hardware, bound every queue, measure freshness as well as frame rate, and keep safety-critical behavior independent of the Flutter client. Useful Links Website: www.v-modal.com SDK Flutter: v-modal/vmodal_sdk_flutter SDK Android: v-modal/vmodal_sdk_android Discord: discord.gg Reddit: reddit.com

  3. Flutter + Jetson: Thermal and Memory Pressure-Aware Operator UI This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. > Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. 1. Define measurable service objectives Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. 2. Instrument the complete path sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See docs.flutter.dev 3. Establish a repeatable baseline 1. Start from a clean launch. 2. Connect to the robot or replay a fixed trace. 3. Run a representative scenario for several minutes. 4. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. 5. Change one variable at a time. 6. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. 4. Separate acquisition from presentation High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. 5. Make buffering bounded Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. - Latest wins: pose, preview frames, current detections. - Drop old items: display-oriented streams where freshness matters. - Persist: events that must survive disconnection. - Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. 6. Protect the Flutter frame budget Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. 7. Keep robotics compute near the robot Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See nvidia-isaac-ros.github.io 8. Treat stale data as a first-class state Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. 9. Validate graceful degradation Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. 10. Release checklist - [ ] Frame-time baseline captured on physical hardware - [ ] p50/p95/p99 event-to-display latency measured - [ ] Queues bounded and overflow observable - [ ] High-frequency state coalesced before UI updates - [ ] Commands and alarms use reliable semantics - [ ] Clock domains and stale-data rules documented - [ ] Network and reconnect behavior tested - [ ] Thermal and memory pressure scenarios tested - [ ] Robot safety remains independent of the mobile app - [ ] Performance budgets enforced in repeatable tests Advanced focus: Thermal and memory pressure Under resource pressure, reduce nonessential preview quality, chart frequency, and diagnostic verbosity. Never hide safety warnings or present missing telemetry as healthy. Observe Jetson health at the service layer; Flutter should display health and degradation policy rather than attempting to manage hardware clocks. Implementation exercise 1. Add timestamps and sequence IDs at the gateway boundary. 2. Capture a normal-load trace and a burst-load trace. 3. Implement a bounded buffer and an explicit overload policy. 4. Display stale/disconnected/degraded states separately. 5. Profile on the target device and compare p50, p95, and p99 results. 6. Document which events may be coalesced and which must be preserved. Conclusion The strongest performance gains usually come from controlling the whole data pipeline: acquisition, processing, filtering, transport, state updates, and rendering. Keep compute close to the hardware, bound every queue, measure freshness as well as frame rate, and keep safety-critical behavior independent of the Flutter client. Useful Links Website: www.v-modal.com SDK Flutter: v-modal/vmodal_sdk_flutter SDK Android: v-modal/vmodal_sdk_android Discord: discord.gg Reddit: reddit.com

  4. Flutter Robotics: Bounded Queues, Load Shedding, and Priority Channels This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. > Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. 1. Define measurable service objectives Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. 2. Instrument the complete path sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See docs.flutter.dev 3. Establish a repeatable baseline 1. Start from a clean launch. 2. Connect to the robot or replay a fixed trace. 3. Run a representative scenario for several minutes. 4. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. 5. Change one variable at a time. 6. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. 4. Separate acquisition from presentation High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. 5. Make buffering bounded Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. - Latest wins: pose, preview frames, current detections. - Drop old items: display-oriented streams where freshness matters. - Persist: events that must survive disconnection. - Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. 6. Protect the Flutter frame budget Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. 7. Keep robotics compute near the robot Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See nvidia-isaac-ros.github.io 8. Treat stale data as a first-class state Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. 9. Validate graceful degradation Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. 10. Release checklist - [ ] Frame-time baseline captured on physical hardware - [ ] p50/p95/p99 event-to-display latency measured - [ ] Queues bounded and overflow observable - [ ] High-frequency state coalesced before UI updates - [ ] Commands and alarms use reliable semantics - [ ] Clock domains and stale-data rules documented - [ ] Network and reconnect behavior tested - [ ] Thermal and memory pressure scenarios tested - [ ] Robot safety remains independent of the mobile app - [ ] Performance budgets enforced in repeatable tests Advanced focus: Load shedding Define priority classes explicitly, for example: P0 safety status and command acknowledgements; P1 operator commands; P2 pose and AI state; P3 previews and charts; P4 logs. This is an application example, not a universal safety standard. Ensure low-priority work cannot block critical state. Implementation exercise 1. Add timestamps and sequence IDs at the gateway boundary. 2. Capture a normal-load trace and a burst-load trace. 3. Implement a bounded buffer and an explicit overload policy. 4. Display stale/disconnected/degraded states separately. 5. Profile on the target device and compare p50, p95, and p99 results. 6. Document which events may be coalesced and which must be preserved. Conclusion The strongest performance gains usually come from controlling the whole data pipeline: acquisition, processing, filtering, transport, state updates, and rendering. Keep compute close to the hardware, bound every queue, measure freshness as well as frame rate, and keep safety-critical behavior independent of the Flutter client. Useful Links Website: www.v-modal.com SDK Flutter: v-modal/vmodal_sdk_flutter SDK Android: v-modal/vmodal_sdk_android Discord: discord.gg Reddit: reddit.com

  5. Flutter + NVIDIA Jetson: Designing a Low-Latency Robotics Gateway Flutter + NVIDIA Jetson: Designing a Low-Latency Robotics Gateway This advanced tutorial treats Flutter as the operator-facing presentation layer while wearable SDKs, Jetson services, ROS 2 nodes, and NVIDIA-accelerated inference handle device-specific or compute-heavy work. The goal is predictable latency, bounded memory, useful observability, and graceful degradation—not simply maximizing message throughput. > Architecture note: Keep safety-critical control loops on the robot. A Flutter app is not a hard real-time controller and must not be the sole safety mechanism. 1. Define measurable service objectives Track freshness, event-to-display latency, throughput, frame pacing, CPU, memory, network use, battery, thermal state, dropped messages, reconnect time, and command acknowledgements. Do not use a single FPS number to represent the entire system: a smooth screen can still display stale data. 2. Instrument the complete path sensor capture -> native/ROS processing -> gateway publish -> Flutter receive -> state accepted -> widget build -> frame rendered Record source and receive timestamps separately. Use monotonic clocks for elapsed durations within a process. When comparing devices, account for clock offset and uncertainty. Profile on a physical target in profile mode and inspect Flutter DevTools' Performance view. Debug-mode timing is not a reliable production baseline. See docs.flutter.dev 3. Establish a repeatable baseline 1. Start from a clean launch. 2. Connect to the robot or replay a fixed trace. 3. Run a representative scenario for several minutes. 4. Record frame times, memory, CPU, message rates, stale-data counts, and reconnects. 5. Change one variable at a time. 6. Compare p50, p95, and p99 latency, not just averages. class PipelineMetrics { int received = 0; int accepted = 0; int dropped = 0; int stale = 0; int uiPublishes = 0; } Use bounded metric windows or histograms; do not store every sample forever. 4. Separate acquisition from presentation High-rate sources should not directly trigger widget rebuilds. Use a latest-value cache for state-like data, bounded queues for events that must be preserved, and a controlled presentation cadence. class LatestValue<T> { T? _value; int _version = 0; void put(T value) { _value = value; _version++; } T? get value => _value; int get version => _version; } Replacing an older pending value may be acceptable for battery, pose, or temperature. Commands, alarms, and audit events need a separate reliable path and explicit acknowledgement semantics. 5. Make buffering bounded Every queue needs a maximum capacity, an overflow policy, a drop/replacement counter, and an owner responsible for recovery. - Latest wins: pose, preview frames, current detections. - Drop old items: display-oriented streams where freshness matters. - Persist: events that must survive disconnection. - Reject with feedback: commands that cannot safely be queued. An unbounded telemetry or log list turns overload into memory growth rather than a visible, measurable condition. 6. Protect the Flutter frame budget Keep parsing, filtering, and transformations out of build(). Split screens into independently updating sections and avoid rebuilding camera or map widgets for unrelated state changes. For CPU-heavy pure Dart work, benchmark compute or a dedicated isolate with realistic payload sizes. Isolates have startup and message-transfer costs. For hardware acceleration or platform APIs, prefer a native service designed for that workload. 7. Keep robotics compute near the robot Sensors -> ROS 2 / accelerated nodes -> Jetson gateway | compact UI-facing state | WebSocket / MQTT / gRPC | Flutter client NVIDIA Isaac ROS provides accelerated, low-latency ROS 2 packages for Jetson and other NVIDIA platforms. Keep image processing, inference, and robot control on the compute side; send Flutter only the information needed for visualization and operator decisions. See nvidia-isaac-ros.github.io 8. Treat stale data as a first-class state Carry source timestamp, receive timestamp, sequence number/version, source identity, and optional confidence or quality. The UI must distinguish zero from unknown, disconnected, and stale. Do not show a green health indicator just because the last payload was healthy. 9. Validate graceful degradation Simulate network delay and packet loss, bursts, robot process restarts, wearable permission loss, camera interruptions, inference slowdown, low memory, and thermal throttling. Under pressure, reduce preview resolution or update frequency and pause nonessential charts—but preserve command and safety status visibility. 10. Release checklist - [ ] Frame-time baseline captured on physical hardware - [ ] p50/p95/p99 event-to-display latency measured - [ ] Queues bounded and overflow observable - [ ] High-frequency state coalesced before UI updates - [ ] Commands and alarms use reliable semantics - [ ] Clock domains and stale-data rules documented - [ ] Network and reconnect behavior tested - [ ] Thermal and memory pressure scenarios tested - [ ] Robot safety remains independent of the mobile app - [ ] Performance budgets enforced in repeatable tests Advanced focus: Gateway design Keep Flutter independent of internal ROS topic names. Map robot-specific messages into versioned application DTOs with schema version, timestamp, sequence number, and capability flags. Separate read-only telemetry from command endpoints, authenticate clients, authorize commands, and report acknowledgements explicitly. Implementation exercise 1. Add timestamps and sequence IDs at the gateway boundary. 2. Capture a normal-load trace and a burst-load trace. 3. Implement a bounded buffer and an explicit overload policy. 4. Display stale/disconnected/degraded states separately. 5. Profile on the target device and compare p50, p95, and p99 results. 6. Document which events may be coalesced and which must be preserved. Conclusion The strongest performance gains usually come from controlling the whole data pipeline: acquisition, processing, filtering, transport, state updates, and rendering. Keep compute close to the hardware, bound every queue, measure freshness as well as frame rate, and keep safety-critical behavior independent of the Flutter client. Useful Links Website: www.v-modal.com SDK Flutter: v-modal/vmodal_sdk_flutter SDK Android: v-modal/vmodal_sdk_android Discord: discord.gg Reddit: reddit.com

  6. Reddit · · r/v_modal · u/brookm291 · v-modal/vmodal_sdk_smartglass

    News: Rokid AI Smart Glasses SDK technical review Developer ecosystem for the Rokid AI Smart Glasses stands out significantly compared to its primary competitor, the Ray-Ban Meta glasses. While Meta locks down its hardware to its proprietary AI ecosystem, Rokid has established a full-stack, highly accessible ecosystem with two distinct avenues of development: standard Android OS deployments and a custom, cross-reality SDK architecture. The developer platform operates on two distinct layers: YodaOS-Sprite (the Android 12-based lightweight OS tailored for all-day wearable glasses) and the CXR (Client Cross-Reality) framework. The Dual-SDK System Architecture According to the official Rokid Open Platform documentation, the development environment requires a coordinated codebase split between two separate SDKs that handle bidirectional communication over Classic Bluetooth, BLE GATT, or high-bandwidth Wi-Fi P2P: - Glasses SDK (Device-Side): Used for building custom applications that compile into standard Android APKs to run directly on the glasses. This layer manages on-device hardware hooks including media capture (Camera2 API), local Automatic Speech Recognition (ASR), Text-to-Speech (TTS), offline voice commands, and power management. - Phone SDK (Companion-Side): Integrates directly into a host Android smartphone app. Because the glasses offload complex networking, this SDK functions as the primary internet gateway, handling high-level computer vision processing, remote OTA updates, and third-party cloud LLM handshakes. Core APIs & Hardware Abstraction Capabilities The SDK abstracts low-level hardware constraints into clean Kotlin and Java endpoints via a unified entry class (CxrApi). Main API modules available in the developer suite include: - Visual Recognition & Vision APIs: Rather than just outputting a standard video pipeline, the SDK includes built-in endpoints for face detection, license plate recognition, and real-time pedestrian/vehicle obstacle tracking. - Camera Optimization Limits: Developers building custom vision apps note that while the camera supports standard Android Camera2 setups, direct JPEG capture can struggle on certain multi-threaded actions. The SDK handles image analysis more reliably when utilizing YUV_420_888 raw pixel buffers. - Messaging & Data Streaming: Standardizes byte-stream transfers, allowing phone apps to feed text straight to the microLED display array or stream low-latency video previews from the glasses' 12MP camera over a native JNI framing layer. Development Workflow: The 'Right' vs. 'Bare Metal' Way On communities*,* engineers outline two distinct methods to build for this hardware: 1. The Official AIUI Studio Path: Rokid features an online IDE called AIUI Studio. It provides a full runtime simulator, built-in code assistants, and an AI Skills Library. This allows developers to construct, debug, and publish customized AI agents and cloud workflows entirely in a virtual sandbox without needing a physical device. 2. The Sideloaded 'Bare Metal' Path: Because YodaOS-Sprite is built directly on top of Android, developers can bypass the official SDK for custom standalone utility tools. By turning on Developer Mode (the standard Android ritual of tapping the software build number repeatedly), developers can establish an Android Debug Bridge (ADB) connection via a USB-C debug cable or over Wi-Fi. This allows developers to push custom APKs straight to the glasses, leveraging standard Android lifecycles for quick prototyping. Current Developer Pain Points While flexible, the ecosystem faces minor regional friction. On the r/rokid_official forum, opinions remain mixed regarding global accessibility. International developers frequently report that certain documentation blocks, code sample repositories, and serial-number license validation portals are heavily centered on Rokid's domestic servers, sometimes resulting in slow download speeds or login hurdles for English-speaking engineers. Source: Rokid technical report

    3 points
  7. Visual Video Search SDK for IOS/Swift detailed testing I tried V-Modal's Swift SDK (v-modal/vmodal_sdk_swift_iphoneduo) through its Framebase example. You describe a scene, and it returns matching frames with timestamps from indexed videos. I haven't tested the alternatives yet. I'm an iOS developer, so the native Swift SDK was a big reason to start here. The API looked convenient, and I liked working with it. I used the three bundled street videos from San Francisco, Singapore and Mexico City. Uploading, indexing, search and playback worked in my Simulator tests. Searching for "A bus on a city street" returned frames with buses. Tapping the 00:35 result opened that moment in the San Francisco video. The screenshots show the library, two searches and playback. For device measurements, I ran 21 searches on an iPhone 13 mini over 5G, using the same index and a limit of 30 results. I alternated three queries for seven cycles and cross-checked the HTTP request timings with Instruments. Median timings in milliseconds, in this order: server execution / SDK search call / frame retrieval: - "Cars at an intersection": 49 / 391 / 1055 - "A bus on a city street": 56 / 413 / 1151 - "People crossing the street": 56 / 426 / 1053 The search-call time already includes server execution. Frame retrieval comes afterward. I didn't measure final UI rendering. These numbers are from the physical iPhone; the app screenshots are from Simulator. I was testing from the Canary Islands, and the team confirmed that the server is in Japan. Distance and routing likely account for some of the gap between server execution and the request times on my phone. I liked the API and authentication approach, especially Swift Concurrency and async/await. One thing I'd change: parameters with a fixed set of accepted values could use dedicated enums instead of strings. I'd rather pick an option through autocomplete than remember its exact spelling, and let the compiler catch invalid values. I also tried "A purple elephant riding a bicycle." At the default distance cutoff of 0.85, it returned two ordinary street frames. For an actual app, I'd check the results and tune that threshold. A returned frame doesn't necessarily contain what you asked for.

    3 points · 2 comments
  8. Robotics SDK for visual/telemetry data upload Tested the VModal Robotics SDK (v0.2.0) on Ubuntu 22.04 / Python 3.10, evaluating it against an AGV doing 8-hour warehouse shifts. It moves finalized LeRobot v3 datasets off the robot to the cloud in a crash-resilient way, without putting any network logic in the control loop. What data it handles - Video: closed MP4 files, one per camera, in their own upload lane (1 GiB per file by default in the current release). - Telemetry: Parquet files, in a separate lane so a slow video upload can't starve it. - Metadata: a snapshot required in every dataset revision, plus The types of telemetry and operational data handled by this SDK include: 1. Data Pipeline & Data Lane Categories The SDK treats telemetry as its own independent data pipeline to prevent large video files from blocking critical metrics: [1] (v-modal/vmodal_sdk_robotics) • Independent Telemetry & Metadata Lane: A dedicated asynchronous upload lane specifically optimized for non-video data. • Synchronized Robot State & Transforms: Mentioned in the Google Intrinsic architecture blueprint to capture physical robot poses and spatial relationship data. • Skill Provenance: Telemetry tracking execution data and the history of operational robot skills. 2. Operational & Device Telemetry The CLI tracks several machine-readable metrics regarding the health and status of the robot's local data storage and transfer progress: • Queue depth: The number of items waiting to be processed in the local spool. • Bytes per lane: The data volume being pushed through the video vs. telemetry pipelines. • Oldest item age: Time-based tracking of un-uploaded data backlog. • Disk headroom: Storage monitoring to ensure the robot doesn't hit a "full disk" failure condition. • Pipeline health statistics: Machine-readable tracking of transmission retries, rejections, blocked items, and the latest server receipts. 3. Video Data & Multimodal Lanes Video data is explicitly isolated from telemetry to ensure high-throughput streams do not block lightweight critical data: • Independent Video Lane: A dedicated asynchronous upload lane configured by default to handle large per-video local spools • RGB-D Capture: The system architecture details handling synchronized multi-modal camera feeds, specifically RGB-D (color and depth) camera streams. • Finalized Video Artifacts: Closed and hashed video streams that are transformed into immutable bytes before being written to the durable local spool. 4. LeRobot Format Integration The SDK acts as a crash-resilient edge pipeline specifically built for LeRobot v3 datasets: • Finalized Dataset Output: The SDK integrates directly at the finalized-artifact boundary of the dataset recorder. The producer script must close, hash, and fsync the dataset before handing it over. • .ready.json Manifest Handoff: The local file handoff mechanism relies on an atomic rename of a LeRobot manifest file (.ready.json), which signals that a dataset folder or segment is finalized and ready for queue admission. • Dataset Identity Tracking: Every LeRobot artifact is given an immutable identity determined by a combination of the Dataset Identity + Relative Path + SHA-256 checksum hash. • Dataset Revision Publishing: Once the remote storage acknowledges a safe transfer via a durable receipt, the SDK publishes a verified dataset revision, finalizing the remote record.

    3 points
  9. Reddit · · r/v_modal · u/brookm291 · v-modal/vmodal_sdk_smartglass

    Google Glasses Software Stack Technical report Analysis of the stark architectural divergence between the legacy Google Glass Enterprise Edition 2 (GDK / Monocular Android) and the modern Android XR Platform. 1. Legacy Monocular Compute vs. Modern Modern Split-Compute Architecture The underlying execution model has completely shifted from standalone, localized computing to a deeply integrated, distributed framework. +-------------------------------------------------------------------------+ | LEGACY ARCHITECTURE (Glass Enterprise 2) | | [On-Glass Qualcomm XR1] -> Run Native Android OS (8.1) -> Direct Render | +-------------------------------------------------------------------------+ +-------------------------------------------------------------------------+ | MODERN ANDROID XR GLASSES ARCHITECTURE (Split-Compute / Project Astra) | | | | [ Wearable Frame ] | | ├── Low-power Tensor ISP (Camera/Mic I/O) | | └── Ultra-low Latency Co-Processor (<20ms local display pipeline) | | ▲ | | │ Bluetooth High-Bandwidth / Wi-Fi Direct | | ▼ | | [ Companion Device / Smartphone (Snapdragon AR2 Gen 2) ] | | ├── Android XR Runtime Pipeline (State Machine) | | └── Jetpack Projected / Jetpack Compose Glimmer Engine | | ▲ | | │ Ultra-Low Latency Cloud Pipeline | | ▼ | | [ Google Cloud Infrastructure ] | | └── Server-side Multimodal Gemini / Project Astra Inference | +-------------------------------------------------------------------------+ Legacy Glass Enterprise Edition 2 - Hardware Profile: Powered by a localized Qualcomm Snapdragon XR1 SoC. - Execution Model: Monolithic. The device ran a standard Android Open Source Project (AOSP) 8.1 Oreo stack directly on the frame. - Rendering Context: System graphics used a standard Android SurfaceFlinger pipeline, pushing flat RGB frames (640x360 pixels) directly into a monocular prism positioned over the right eye. Modern Android XR (e.g., Project Aura & Display AI Glasses) - Split-Compute Topology: To reduce thermal load and maintain a weight under 50 grams, the compute is strictly split. The glasses act as an intelligent sensor/emitter array, offloading intense execution to a paired smartphone via high-bandwidth Bluetooth/Wi-Fi Direct. - Asynchronous AI Processing Loop: 1. Local Tier: Simple voice detection, wake words, and inertial measurement unit (IMU) step-counting execute on a custom, low-power local Tensor silicon block. 2. Remote Edge/Cloud Tier: Real-time visual streams from the camera sensor capture the environment and are fed via the smartphone to the Gemini / Project Astra vision framework for multimodal context parsing. 2. The Optical Stack & Photon Pipeline The rendering pipeline requires highly disparate display architectures depending on the hardware targets. |Architectural Component|Legacy Glass Enterprise 2|Modern Display AI Glasses|High-End XR Headsets| |:-|:-|:-|:-| |Display Panel Tech|Transmissive LCoS / Prism|Monolithic full-color MicroLED|Dual Micro-OLED| |Optics Pipeline|Refractive Geometric Prism|1mm Thin Diffractive Waveguide|Pancake Lenses (~110°+ FOV)| |Field of View (FOV)|~15° (Peripheral Monocular)|50° – 70° Additive Binocular|110°+ Fully Occluded| |Spatial Interaction|None (Static screen overlay)|Real-time Scene Meshing & Anchors|Complete Depth Pass-Through| On modern Display Glasses, graphics are injected via monolithic MicroLED projectors into a 1mm diffractive waveguide. Because the optics are transparent and additive, the alpha channel of your UI elements dictates transparency (black pixels represent complete transparency, letting real-world photons pass undisturbed). 3. Software Architecture: The Android XR Fork Google’s modern XR platform splits development paths intentionally. If you are developing for eyewear using SDK Developer Preview 3/4, the code base branches based on device occlusion. [1, 11] [ Android XR SDK Platform Layer ] | +------------------------+------------------------+ | | [ Headset Target Stack ] [ Glasses Target Stack ] ├── ARCore for Jetpack XR ├── Jetpack Projected Framework ├── SceneCore Engine ├── Jetpack Compose Glimmer Engine └── 3D Spatial Mesh Anchors └── Multimodal Audio/Visual Canvas - The Headset Architecture (Galaxy XR, etc.): Relies on SceneCore and ARCore for Jetpack XR. It tracks complete 6-DOF environments, placing high-fidelity 3D meshes that occlude or blend seamlessly with spatial depth matrices. - The Glasses Architecture (Audio & Display Smart Glasses): Operates on the Jetpack Projected framework and Jetpack Compose Glimmer. This decoupled UI subsystem does not render heavy spatial scenes. Instead, it generates glanceable, transient view elements mapped directly over real-world coordinates via lightweight directional matrices. 4. Hardware Abstraction & Input Subsystem In the legacy paradigm, input was bound via simple Linux input events (/dev/input/eventX) triggered by physical taps and forward/backward swipes on the frame's side-touchpad. The modern Android XR Input subsystem aggregates data across an asynchronous hardware abstraction layer (HAL): - Multi-Microphone Array Processing: Features a 5-microphone setup executing local hardware phase cancellation. This separates the user’s acoustic vocal signature from background ambient noise, delivering an unpolluted audio signal directly to the speech recognition pipeline. - Indirect Modality Mapping: Hand tracking models run on the companion phone, computing coordinate changes from the glasses' camera stream. These tracking outputs translate into standard UI click and scroll events within the Android runtime, omitting the need for a physical capacitive touchpad. Additional tools can be connected such as vision visual video search SDK, audio frameworks, _______________________________________________________________________ The technical breakdown lines up with the modern framework in several ways: 1. Split-Compute Topology The architectural shift away from the standalone compute of legacy Google Glass (Enterprise Edition) is a defining feature of the Fall 2026 consumer rollout. The 2026 architecture relies heavily on a companion device (smartphone) to handle the heavy AI lifting and state runtime, keeping the actual eyewear frames lightweight (under 50 grams) and thermally viable for all-day wear. [ 2. The Twin Tier Glass Strategy The distinction between non-occluded "Audio-only" glasses and "Display AI" glasses is the exact hardware road map Google and its partners (Samsung, Qualcomm, Warby Parker, and Gentle Monster) have instituted. - Audio Glasses: Ship first, routing Gemini multimodal audio cues. - Display Glasses: Utilize microLED/diffractive waveguide tech for glanceable HUD overlays. [2, 6, 8] 3. Jetpack Projected & Compose Glimmer The software APIs mentioned—unset Jetpack Projected and unset Jetpack Compose Glimmer —are the core production toolkits for 2026. - Jetpack Projected bridges the phone's lifecycle and wear-state connectivity to the glasses. - Jetpack Compose Glimmer is the specific rendering engine built for transparent, additive screens, managing high-contrast text and glanceable components without distracting the wearer's real-world sight.

    3 points · 2 comments
  10. Reddit · · r/v_modal · u/brookm291 · v-modal/vmodal_sdk_flutter

    Visual Search Video Demo : Physical AI, Real Estate, Street View, ... V-Modal AI youtube channel (@vmodalai) primarily shows technical use-case videos of AI-powered multimodal search technology. content focuses on demonstrating how their platform acts as a "visual memory layer" to search through massive video archives using natural language and visual queries instead of manual tagging.: - Dashboard & Search Product Demos: Walk-throughs showing how users can input complex natural language sentences (e.g., "Find scenes where pedestrians, cars, and motorcycles are interacting around a busy intersection") into a web interface to pull up frame-exact video matches across thousands of hours of content instantly. - Industry-Specific Showcases: Videos tailored to specific industries illustrating semantic video search in action, including: - Architecture and Travel: Searching through specific aesthetic details, times of day, lighting, and locations (such as historic Kyoto footages). - Industrial Production Floors & Safety: Using AI to index what is happening in a frame—tracking equipment, PPE compliance, and forklift or vehicle segregation to aid in incident investigations. - Fashion & E-Commerce: Highlighting how apps can allow users to jump directly to specific product clips using images or visual descriptions. - Developer and SDK Integration Previews: Short clips showing their cross-platform capabilities (like their Flutter SDK) handling video processing, search queries, and streaming directly inside mobile or web application layouts. Sources: youtube.com

    4 points · 3 comments

Achievements

Awards earned by the repositories v-modal owns. Select an award to embed its badge.

No awards yet

Repositories earn awards by reaching the top three in a completed trending day or week.

A repository earns an award for finishing first, second or third in a completed trending day or week, ranked by new stars, new forks or pull request authors. Awards follow a repository through renames and transfers and count toward its current owner. Weeks run Monday to Sunday, UTC.