# zerochocobo/thru3d-media-player architecture

> Architecture diagram of the GitHub repository zerochocobo/thru3d-media-player, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zerochocobo/thru3d-media-player
- Repository: https://github.com/zerochocobo/thru3d-media-player

## Overview

Thru3D is an Android VR/MR media player for Quest and PICO. A user browses local, cloud, or network media, selects content, and plays it in the headset with supported stereo, passthrough, subtitle, and rendering options. The product also has distinct browser, photo, document/comic, casting, and scene-import experiences. The graph preserves those documented capabilities; source excerpts are sparse, so most feature relationships are documented README flows rather than inspected call paths.

Main entry points: [`native/mpv/mpv_source.cpp`](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/mpv/mpv_source.cpp) (Media Playback), [`android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStorageVolumes.kt`](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStorageVolumes.kt) (Local Storage), [`android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt`](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt) (Local Stream Server), [`android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/CloudStreamSource.kt`](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/CloudStreamSource.kt) (Cloud Drives)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Media Access"]
  node_local["Local Storage"]
  node_usb["USB Storage<br/>[UsbStorage.kt]"]
  node_cloud["Cloud Drives"]
  node_media_types["Media Classification<br/>[MediaKinds.kt]"]
  node_dlna["DLNA Libraries<br/>[DlnaClient.kt]"]
  node_dvd["DVD Sources<br/>[DvdFolderImage.kt]"]
  node_stream["Local Stream Server"]
  node_cloud_search["Cloud Search<br/>[cloud_search.go]"]
end

subgraph group_playback["Playback and XR"]
  node_player["Media Playback<br/>[mpv_source.cpp]"]
  node_render["XR Rendering<br/>[render_bridge.cpp]"]
  node_layers["Compositor Layers<br/>[video_layer.cpp]"]
  node_scene["3D Scenes<br/>[unity_scene.cpp]"]
  node_hdr["HDR Processing<br/>[hdr_image.cpp]"]
end

subgraph group_browser["Browser and Casting"]
  node_airplay["AirPlay Receiver"]
  node_web["Web Browser"]
  node_dlna_cast["DLNA Receiver<br/>[DlnaReceiver.kt]"]
end

subgraph group_reading["Photos and Reading"]
  node_photo["Photo Experience<br/>[PhotoBridge.kt]"]
  node_documents["PDF and Comics<br/>[PdfBridge.kt]"]
  node_ocr["Comic OCR<br/>[comic_ocr.cpp]"]
end

subgraph group_intelligence["AI and Narration"]
  node_subtitles["Live Subtitles"]
  node_narration["Narration Engine"]
  node_depth["Depth Processing"]
end

node_user(("Viewer"))

node_user -->|"browses"| node_local
node_user -->|"browses"| node_cloud
node_user -->|"browses"| node_dlna
node_user -->|"browses"| node_usb
node_user -->|"plays media"| node_player
node_local -->|"classifies files"| node_media_types
node_local -->|"serves media"| node_stream
node_cloud -->|"serves media"| node_stream
node_stream -->|"provides streams"| node_player
node_player -.->|"renders frames"| node_render
node_render -.->|"composes output"| node_layers
node_user -->|"opens discs"| node_dvd
node_user -->|"browses pages"| node_web
node_user -->|"mirrors media"| node_airplay
node_user -->|"casts media"| node_dlna_cast
node_user -->|"searches drives"| node_cloud_search
node_user -->|"views photos"| node_photo
node_user -->|"reads documents"| node_documents
node_documents -.->|"recognizes text"| node_ocr
node_user -->|"enables captions"| node_subtitles
node_user -->|"uses narration"| node_narration
node_user -->|"enables depth"| node_depth
node_player -.->|"processes HDR"| node_hdr
node_user -->|"imports scenes"| node_scene

click node_local "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStorageVolumes.kt"
click node_usb "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/UsbStorage.kt"
click node_cloud "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/CloudStreamSource.kt"
click node_media_types "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/MediaKinds.kt"
click node_dlna "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaClient.kt"
click node_dvd "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DvdFolderImage.kt"
click node_stream "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt"
click node_player "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/mpv/mpv_source.cpp"
click node_render "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/render-bridge/render_bridge.cpp"
click node_layers "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/xr-layer/video_layer.cpp"
click node_scene "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/unity-scene/unity_scene.cpp"
click node_airplay "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/AirplayReceiverService.kt"
click node_web "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/web-browser/src/main/java/org/vrpassthroughplayer/plugin/WebBookmarkService.kt"
click node_cloud_search "https://github.com/zerochocobo/thru3d-media-player/blob/main/cloud/openlist/cloud_search.go"
click node_photo "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PhotoBridge.kt"
click node_documents "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PdfBridge.kt"
click node_ocr "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/narration/comic_ocr.cpp"
click node_subtitles "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/ListeningController.kt"
click node_narration "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/SharedNarrationEngine.kt"
click node_depth "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/rvm/rvm_runtime_jni.cpp"
click node_hdr "https://github.com/zerochocobo/thru3d-media-player/blob/main/native/hdr/hdr_image.cpp"
click node_dlna_cast "https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaReceiver.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_local,node_usb,node_cloud,node_media_types,node_dlna,node_dvd,node_stream,node_cloud_search,node_user toneBlue
class node_player,node_render,node_layers,node_scene,node_hdr toneAmber
class node_airplay,node_web,node_dlna_cast toneMint
class node_photo,node_documents,node_ocr toneRose
class node_subtitles,node_narration,node_depth toneIndigo
```

## Components

### Media Access

- [Local Storage](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStorageVolumes.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStorageVolumes.kt`
- [USB Storage](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/UsbStorage.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/UsbStorage.kt`
- [Cloud Drives](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/CloudStreamSource.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/CloudStreamSource.kt`
- [Media Classification](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/MediaKinds.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/MediaKinds.kt`
- [DLNA Libraries](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaClient.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaClient.kt`
- [DVD Sources](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DvdFolderImage.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DvdFolderImage.kt`
- [Local Stream Server](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt`
- [Cloud Search](https://github.com/zerochocobo/thru3d-media-player/blob/main/cloud/openlist/cloud_search.go): `cloud/openlist/cloud_search.go`

### Playback and XR

- [Media Playback](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/mpv/mpv_source.cpp): `native/mpv/mpv_source.cpp`
- [XR Rendering](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/render-bridge/render_bridge.cpp): `native/render-bridge/render_bridge.cpp`
- [Compositor Layers](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/xr-layer/video_layer.cpp): `native/xr-layer/video_layer.cpp`
- [3D Scenes](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/unity-scene/unity_scene.cpp): `native/unity-scene/unity_scene.cpp`
- [HDR Processing](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/hdr/hdr_image.cpp): `native/hdr/hdr_image.cpp`

### Browser and Casting

- [AirPlay Receiver](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/AirplayReceiverService.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/AirplayReceiverService.kt`
- [Web Browser](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/web-browser/src/main/java/org/vrpassthroughplayer/plugin/WebBookmarkService.kt): `android/web-browser/src/main/java/org/vrpassthroughplayer/plugin/WebBookmarkService.kt`
- [DLNA Receiver](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaReceiver.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/DlnaReceiver.kt`

### Photos and Reading

- [Photo Experience](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PhotoBridge.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PhotoBridge.kt`
- [PDF and Comics](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PdfBridge.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/PdfBridge.kt`
- [Comic OCR](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/narration/comic_ocr.cpp): `native/narration/comic_ocr.cpp`

### AI and Narration

- [Live Subtitles](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/ListeningController.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/ListeningController.kt`
- [Narration Engine](https://github.com/zerochocobo/thru3d-media-player/blob/main/android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/SharedNarrationEngine.kt): `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/SharedNarrationEngine.kt`
- [Depth Processing](https://github.com/zerochocobo/thru3d-media-player/blob/main/native/rvm/rvm_runtime_jni.cpp): `native/rvm/rvm_runtime_jni.cpp`

### Other components

- **Viewer**

## Connections

- Viewer → Local Storage: browses (evidence: `README.md`)
- Viewer → Cloud Drives: browses (evidence: `README.md`)
- Viewer → DLNA Libraries: browses (evidence: `README.md`)
- Viewer → USB Storage: browses (evidence: `README.md`)
- Viewer → Media Playback: plays media (evidence: `README.md`)
- Local Storage → Media Classification: classifies files (evidence: `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/MediaKinds.kt`)
- Local Storage → Local Stream Server: serves media (evidence: `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt`)
- Cloud Drives → Local Stream Server: serves media (evidence: `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt`)
- Local Stream Server → Media Playback: provides streams (evidence: `android/player-plugin/src/main/java/org/vrpassthroughplayer/plugin/LocalStreamServer.kt`)
- Media Playback → XR Rendering: renders frames
- XR Rendering → Compositor Layers: composes output
- Viewer → DVD Sources: opens discs (evidence: `README.md`)
- Viewer → Web Browser: browses pages (evidence: `README.md`)
- Viewer → AirPlay Receiver: mirrors media (evidence: `README.md`)
- Viewer → DLNA Receiver: casts media (evidence: `README.md`)
- Viewer → Cloud Search: searches drives (evidence: `README.md`)
- Viewer → Photo Experience: views photos (evidence: `README.md`)
- Viewer → PDF and Comics: reads documents (evidence: `README.md`)
- PDF and Comics → Comic OCR: recognizes text
- Viewer → Live Subtitles: enables captions (evidence: `README.md`)
- Viewer → Narration Engine: uses narration (evidence: `README.md`)
- Viewer → Depth Processing: enables depth (evidence: `README.md`)
- Media Playback → HDR Processing: processes HDR
- Viewer → 3D Scenes: imports scenes (evidence: `README.md`)
