# Screph action graph — modified Gource

This visualization contains modified Gource 0.56 C++ code, compiled to
WebAssembly. It is distributed under GPL-3.0-or-later. Gource copyright
notices are preserved in the corresponding source.

- Upstream: <https://github.com/acaudwell/Gource/tree/gource-0.56>
- Gource commit: `1b4e37d71506e6ad19f15190907852978507fc6a`
- Core commit: `df513a31f531e869a0eb7a2a6174a0e93b8d2ffb`
- License: [COPYING](COPYING)
- Modified source and build material: [source archive](wasm/gource-corresponding-source.zip)
- Dependency provenance: [SOURCE_REFERENCES.json](wasm/SOURCE_REFERENCES.json)
- Browser host source: [live.js](live.js), [live.css](live.css), [live.html](live.html)

Modifications, October 2026: browser lifecycle and WebGL adaptation, site theme,
optional left-to-right native tree layout, and directed links between the
original Gource file nodes. The website uses the original directory tree,
file movement, camera and action timing, with soft workspace forces and a
highlighted main sequence (left-to-right on desktop, top-to-bottom in portrait). Original minimalist icons replace
file textures; native rings have extra spacing and labels clear the glyphs.
The added straight links follow those file positions; their activity comes from Gource's existing
RAction progress. Route selection highlights links without replacing the tree.
The JavaScript host loads assets and connects controls; C++ renders on the
client's machine. Log timestamps and authors describe a demonstration, not
recorded program execution or development history.

Each of the 75 actions has its own semantic glyph. Nine transfer glyphs
represent images, projects, code, models, datasets, results, text, settings
and interaction. Their movement follows native RAction progress.
The editable SVGs, 64px PNGs and generators are included in the corresponding
source under GPL-3.0-or-later. A single Screph character is a small triangulated
3D model rendered by native Gource OpenGL/WebGL. Its geometry uses only the
original frontal rig proportions; side/rear bitmap poses are not model inputs.
The approximately 20px graph scene uses a simplified 162-triangle mesh instead
of the original 1,254 triangles. The detailed version is preserved unchanged in
the source archive under tools/gource/mascot-models/detailed-v1, with its SHA-256
manifest. It is not compiled into or loaded by this scene.
The torso is 15% wider, with continuous body/head turns and native-clock medium
jetpack thrust. The character is 30% smaller; beams originate at its rotated
face centre. One logical actor crossfades its previous
position for 0.55 seconds while its current pose appears over 0.30 seconds.
Browser pointer capture replaces SDL relative mouse mode for dragging. The graph
and homepage card cloud share bounded input smoothing and exponential decay;
native camera bounds keep the graph reachable after a drag outside the canvas.
Hover is always active. A click enables camera gestures; clicking outside,
Escape, losing focus or leaving the viewport returns scroll to the page.
The graph starts automatically when its viewport becomes visible, independently
of the homepage's other demo modes, and suspends rendering offscreen or in a
hidden tab. Each new native action beam shows its target's name for two seconds,
then fades the name over one second. Both character poses use half the previous
shadow opacity.
In portrait view only, glyphs render at half size while native file/ring sizes
and internal spacing remain unchanged. Module anchors spread by 10%. Initial
camera distance increases by 50%, gradually returning to ordinary overview
fitting as all nodes arrive; manual zoom is preserved.
The actor speed limit is 350 units/s (formerly 500), and the graph action
progress limit is 7/s (formerly 10); slower actions keep their original rate.

The supplied Inter typeface is copyright 2020 The Inter Project Authors,
distributed under the [SIL Open Font License 1.1](fonts/OFL.txt).

The optional MP4 preview records the earlier native build, before workspace
forces and icons were added. The interactive graph renders on the client
and does not use that recording for rendering.
