# fury-gl/fury architecture

> Architecture diagram of the GitHub repository fury-gl/fury, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/fury-gl/fury
- Repository: https://github.com/fury-gl/fury

## Overview

FURY is a Python scientific-visualization and 3D-animation library. The principal workflow is to create visualization objects, assemble them into a scene, and use a window manager to render and interact with that scene. Separate capabilities include custom UI, network visualization, animation timelines, shader integration, and downloadable visualization data. The graph uses README capabilities and the supplied source excerpts; unsampled subsystem wiring is not inferred.

Main entry points: [`fury/window.py`](https://github.com/fury-gl/fury/blob/master/fury/window.py) (Scene And Window), [`fury/ui/elements.py`](https://github.com/fury-gl/fury/blob/master/fury/ui/elements.py) (UI Components), [`fury/lib.py`](https://github.com/fury-gl/fury/blob/master/fury/lib.py) (Graphics Backend), [`fury/motion/core.py`](https://github.com/fury-gl/fury/blob/master/fury/motion/core.py) (Animations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_viz["Visualization Objects"]
  node_actors["3D Actors<br/>[core.py]"]
  node_curved["Curved Geometry<br/>[curved.py]"]
  node_planar["Planar Geometry<br/>[planar.py]"]
  node_poly["Polyhedra<br/>[polyhedron.py]"]
end

subgraph group_runtime["Rendering Runtime"]
  node_scene["Scene And Window<br/>[window.py]"]
  node_backend["Graphics Backend<br/>[lib.py]"]
end

subgraph group_interaction["UI And Animation"]
  node_ui["UI Components<br/>[elements.py]"]
  node_containers["UI Containers<br/>[containers.py]"]
  node_ui_context["UI Context<br/>[context.py]"]
  node_motion["Animations<br/>[core.py]"]
  node_timeline["Timeline Playback<br/>[timeline.py]"]
  node_interpolator["Interpolation<br/>[interpolator.py]"]
end

subgraph group_domains["Scientific Domains"]
  node_network["Network Visualization<br/>[core.py]"]
  node_parser["Network Parsing<br/>[parser.py]"]
end

subgraph group_support["Data And Shaders"]
  node_data["Data Fetching<br/>[fetcher.py]"]
  node_io["Visualization I/O<br/>[io.py]"]
  node_shader["Custom Shaders<br/>[shader.py]"]
end

node_user(("Python User"))
node_gfx["PyGFX And WGPU"]
node_jupyter["Jupyter Runtime"]

node_user -->|"creates objects"| node_actors
node_user -->|"creates controls"| node_ui
node_user -->|"defines animation"| node_motion
node_actors -->|"adds to scene"| node_scene
node_curved -->|"adds actors"| node_scene
node_planar -->|"adds actors"| node_scene
node_poly -->|"adds actors"| node_scene
node_scene -->|"renders scene"| node_backend
node_backend -->|"uses graphics API"| node_gfx
node_scene -.->|"supports notebook canvas"| node_jupyter
node_ui -->|"composes controls"| node_containers
node_ui -->|"tracks interaction state"| node_ui_context
node_motion -->|"evaluates keyframes"| node_interpolator
node_timeline -->|"updates animations"| node_motion
node_scene -->|"attaches playback"| node_timeline
node_user -->|"builds network view"| node_network
node_parser -->|"parses network data"| node_network
node_user -->|"supplies network file"| node_parser
node_user -->|"requests datasets"| node_data
node_user -->|"loads or saves data"| node_io
node_user -->|"defines shader effects"| node_shader
node_shader -->|"registers shader support"| node_backend

click node_actors "https://github.com/fury-gl/fury/blob/master/fury/actor/core.py"
click node_curved "https://github.com/fury-gl/fury/blob/master/fury/actor/curved.py"
click node_planar "https://github.com/fury-gl/fury/blob/master/fury/actor/planar.py"
click node_poly "https://github.com/fury-gl/fury/blob/master/fury/actor/polyhedron.py"
click node_scene "https://github.com/fury-gl/fury/blob/master/fury/window.py"
click node_backend "https://github.com/fury-gl/fury/blob/master/fury/lib.py"
click node_ui "https://github.com/fury-gl/fury/blob/master/fury/ui/elements.py"
click node_containers "https://github.com/fury-gl/fury/blob/master/fury/ui/containers.py"
click node_ui_context "https://github.com/fury-gl/fury/blob/master/fury/ui/context.py"
click node_motion "https://github.com/fury-gl/fury/blob/master/fury/motion/core.py"
click node_timeline "https://github.com/fury-gl/fury/blob/master/fury/motion/timeline.py"
click node_interpolator "https://github.com/fury-gl/fury/blob/master/fury/motion/interpolator.py"
click node_network "https://github.com/fury-gl/fury/blob/master/fury/network/core.py"
click node_parser "https://github.com/fury-gl/fury/blob/master/fury/network/parser.py"
click node_data "https://github.com/fury-gl/fury/blob/master/fury/data/fetcher.py"
click node_io "https://github.com/fury-gl/fury/blob/master/fury/io.py"
click node_shader "https://github.com/fury-gl/fury/blob/master/fury/shader.py"

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_actors,node_curved,node_planar,node_poly,node_user toneBlue
class node_scene,node_backend toneAmber
class node_ui,node_containers,node_ui_context,node_motion,node_timeline,node_interpolator toneMint
class node_network,node_parser toneRose
class node_data,node_io,node_shader,node_gfx,node_jupyter toneIndigo
```

## Components

### Visualization Objects

- [3D Actors](https://github.com/fury-gl/fury/blob/master/fury/actor/core.py): `fury/actor/core.py`
- [Curved Geometry](https://github.com/fury-gl/fury/blob/master/fury/actor/curved.py): `fury/actor/curved.py`
- [Planar Geometry](https://github.com/fury-gl/fury/blob/master/fury/actor/planar.py): `fury/actor/planar.py`
- [Polyhedra](https://github.com/fury-gl/fury/blob/master/fury/actor/polyhedron.py): `fury/actor/polyhedron.py`

### Rendering Runtime

- [Scene And Window](https://github.com/fury-gl/fury/blob/master/fury/window.py): `fury/window.py`
- [Graphics Backend](https://github.com/fury-gl/fury/blob/master/fury/lib.py): `fury/lib.py`

### UI And Animation

- [UI Components](https://github.com/fury-gl/fury/blob/master/fury/ui/elements.py): `fury/ui/elements.py`
- [UI Containers](https://github.com/fury-gl/fury/blob/master/fury/ui/containers.py): `fury/ui/containers.py`
- [UI Context](https://github.com/fury-gl/fury/blob/master/fury/ui/context.py): `fury/ui/context.py`
- [Animations](https://github.com/fury-gl/fury/blob/master/fury/motion/core.py): `fury/motion/core.py`
- [Timeline Playback](https://github.com/fury-gl/fury/blob/master/fury/motion/timeline.py): `fury/motion/timeline.py`
- [Interpolation](https://github.com/fury-gl/fury/blob/master/fury/motion/interpolator.py): `fury/motion/interpolator.py`

### Scientific Domains

- [Network Visualization](https://github.com/fury-gl/fury/blob/master/fury/network/core.py): `fury/network/core.py`
- [Network Parsing](https://github.com/fury-gl/fury/blob/master/fury/network/parser.py): `fury/network/parser.py`

### Data And Shaders

- [Data Fetching](https://github.com/fury-gl/fury/blob/master/fury/data/fetcher.py): `fury/data/fetcher.py`
- [Visualization I/O](https://github.com/fury-gl/fury/blob/master/fury/io.py): `fury/io.py`
- [Custom Shaders](https://github.com/fury-gl/fury/blob/master/fury/shader.py): `fury/shader.py`

### Other components

- **Python User**
- **PyGFX And WGPU**
- **Jupyter Runtime**

## Connections

- Python User → 3D Actors: creates objects
- Python User → UI Components: creates controls
- Python User → Animations: defines animation
- 3D Actors → Scene And Window: adds to scene
- Curved Geometry → Scene And Window: adds actors
- Planar Geometry → Scene And Window: adds actors
- Polyhedra → Scene And Window: adds actors
- Scene And Window → Graphics Backend: renders scene
- Graphics Backend → PyGFX And WGPU: uses graphics API
- Scene And Window → Jupyter Runtime: supports notebook canvas
- UI Components → UI Containers: composes controls
- UI Components → UI Context: tracks interaction state
- Animations → Interpolation: evaluates keyframes
- Timeline Playback → Animations: updates animations
- Scene And Window → Timeline Playback: attaches playback
- Python User → Network Visualization: builds network view
- Network Parsing → Network Visualization: parses network data
- Python User → Network Parsing: supplies network file
- Python User → Data Fetching: requests datasets
- Python User → Visualization I/O: loads or saves data
- Python User → Custom Shaders: defines shader effects
- Custom Shaders → Graphics Backend: registers shader support
