rio-webgpu-tiles
WebGPU tile rendering for Rio Terminal via wgpu and sugarloaf. Extends
When & Why to Use This Skill
Rio WebGPU Tiles is a high-performance skill designed to enable GPU-accelerated tile rendering within the Rio Terminal. By leveraging WebGPU (via wgpu) and the sugarloaf brush architecture, it allows developers to integrate dynamic visual elements and custom WGSL shaders directly into the terminal interface using OSC 1337 sequences, significantly enhancing the terminal's graphical capabilities.
Use Cases
- Real-time Dashboarding: Displaying animated system metrics, clocks, or status indicators as persistent tiles within the terminal workspace without affecting text flow.
- Custom Shader Development: Prototyping and testing WGSL fragment and vertex shaders (such as plasma or noise effects) directly in a terminal environment for rapid feedback.
- Enhanced CLI UI: Creating visually rich command-line interfaces with persistent or transient graphical overlays to improve data presentation and user experience.
- Scientific Visualization: Integrating complex graphical representations and graph theory data (via networkx) into the terminal view for advanced data analysis.
| name | rio-webgpu-tiles |
|---|---|
| description | WebGPU tile rendering for Rio Terminal via wgpu and sugarloaf. Extends |
| version | 1.0.0 |
Rio WebGPU Tiles
GPU-accelerated tile rendering in Rio Terminal using wgpu and the sugarloaf brush architecture.
Architecture Overview
OSC 1337 Sequence → rio-backend (parse) → RioEvent::InsertTile → rioterm (frontend) → sugarloaf TileBrush → wgpu render
Core Files
| File | Purpose |
|---|---|
sugarloaf/src/components/tiles/mod.rs |
TileBrush, TileWorldState, GPU buffers |
sugarloaf/src/sugarloaf.rs |
Main renderer integration, public API |
rio-backend/src/ansi/tile_protocol.rs |
OSC 1337 Tile= parsing |
rio-backend/src/performer/handler.rs |
OSC dispatch to handler |
rio-backend/src/event/mod.rs |
InsertTile event variant |
frontends/rioterm/src/application.rs |
Frontend event handling |
Protocol: OSC 1337 Tile Extension
# Format: ESC ] 1337 ; Tile = key:value,key:value,... BEL
printf '\033]1337;Tile=shader:plasma,x:50,y:50,w:200,h:150\007'
Parameters
| Key | Type | Description |
|---|---|---|
shader |
string | plasma, clock, noise, or custom ID |
x, y |
f32 | Position in pixels |
w, h |
f32 | Size in pixels |
id |
u64 | Tile ID (0 = auto-assign) |
kind |
string | persistent (default) or transient |
r, g, b, a |
f32 | Custom color/data (0.0-1.0) |
time_offset |
f32 | Animation time offset |
Tile Lifecycle
Persistent Tiles
Remain until explicitly removed by ID:
let id = sugarloaf.create_persistent_tile(scene);
// ... later
sugarloaf.remove_persistent_tile(id);
Transient Tiles
Cleared at begin_frame(), must be re-pushed each frame:
sugarloaf.push_transient_tile(scene);
TileWorldState
Manages CPU state with high-precision time (f64), converted to modular f32 for GPU:
pub struct TileWorldState {
persistent: HashMap<TileId, TileScene>,
transient: Vec<TileScene>,
world_time_seconds: f64,
next_id: TileId,
}
impl TileWorldState {
pub fn begin_frame(&mut self, dt_seconds: f64) {
self.world_time_seconds += dt_seconds;
self.transient.clear();
}
}
Writing WGSL Shaders
Uniform structure available in shaders:
struct Uniforms {
position: vec2<f32>, // NDC position
size: vec2<f32>, // NDC size
time: f32, // Animation time (modular)
custom: vec4<f32>, // r,g,b,a from protocol
}
@group(0) @binding(0) var<uniform> u: Uniforms;
Vertex Shader Pattern
@vertex
fn vs_main(@location(0) pos: vec2<f32>, @location(1) uv: vec2<f32>) -> VertexOutput {
var out: VertexOutput;
let screen_pos = u.position + pos * u.size;
out.position = vec4<f32>(screen_pos, 0.0, 1.0);
out.uv = uv;
return out;
}
Fragment Shader Pattern
@fragment
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
let t = u.time;
// Your shader logic using in.uv, t, u.custom
return vec4<f32>(color, 1.0);
}
Demo Scripts
# Plasma effect
printf '\033]1337;Tile=shader:plasma,x:50,y:50,w:200,h:150,r:0.5,g:0.2,b:0.8\007'
# Clock display
printf '\033]1337;Tile=shader:clock,x:300,y:50,w:250,h:80\007'
# Remove by ID
printf '\033]1337;Tile=remove:42\007'
Integration Checklist
- Add TileBrush to sugarloaf - Register in brush list, call in render loop
- Parse OSC 1337 in rio-backend - Extend performer handler
- Create RioEvent variant -
InsertTile(TileSpec) - Handle in frontend - Convert TileSpec → TileScene, call sugarloaf API
- Manage state - Call
begin_frame(dt)before each render
Shader Examples
See reference/shaders.md for complete plasma, clock, and noise shader implementations.
Scientific Skill Interleaving
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
Graph Theory
- networkx [○] via bicomodule
- Universal graph hub
Bibliography References
general: 734 citations in bib.duckdb
Cat# Integration
This skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
GF(3) Naturality
The skill participates in triads satisfying:
(-1) + (0) + (+1) ≡ 0 (mod 3)
This ensures compositional coherence in the Cat# equipment structure.