Skip to content

Animation

Animation never changes the layout. Frame zero is always the complete diagram, so static viewers and PDFs stay correct.

# Animation showcase: flowing edges in each direction, animated borders
graph theme=nord dir=LR route=bend

client "client" border=pulse
api "API gateway" border=march
svc "service"
db "database" shape=cylinder border=glow .green
cache "cache" .yellow

client -> api flow=forward
api -> svc flow=forward flow-speed=0.8s
svc <-> db flow=both
svc <- cache flow=auto           # follows the arrow: cache -> svc
api .. cache flow=reverse arrow=none

Animation showcase

Edge flows

  • flow=forward|reverse|both|auto
  • flow-speed=1.2s

Animated borders

  • border=march|pulse|glow
  • border-speed=1.6s

All keys also work in default statements and as CSS properties: edge.hot { flow: forward; flow-speed: .6s; }.

Output

  • pdg x.pdg: animated SVG (SMIL, plays in browsers)
  • pdg x.pdg --static or --at 0.4: frozen SVG
  • pdg x.pdg -o x.png: animated PNG, one seamless loop. --fps, --scale, --seconds tune it.

A bigger example

# Blueprint: GPU box to GPU cloud
# Converted from the Graphviz `dot` block in talks/containerdays_neocloud_story.md
graph theme=nord dir=TB route=bend rank-gap=34 node-gap=22
css {
  node  { text-align: left; font-size: 13px; padding: 6px 10px; }
  group { font-size: 11px; letter-spacing: 1px; }
  group.bare { fill: none; stroke: none; padding: 0; }
}

group tenants "TENANTS" layout=row gap=24 {
  ns  "ResourceQuota per namespace\nlimits.nvidia.com/gpumem\nlimits.nvidia.com/gpucores" .red
  pod "1  tenant pod\nnvidia.com/gpu\n+ gpumem + gpucores" .red
}

group cp "CONTROL PLANE" layout=row gap=18 {
  dra "HAMi-DRA (later)\nResourceClaims\nK8s 1.34+" .cyan stroke-dasharray=5,3
  wh  "2  webhook vgpu.hami.io\nsets schedulerName:\nhami-scheduler" .cyan
  sch "3  hami-scheduler pod :9395\nkube-scheduler\n+ vgpu-scheduler-extender" .cyan border=pulse
  bs  "optional brain\nVolcano\nKueue / KAI" stroke-dasharray=5,3
}

group lower "" layout=row gap=28 .bare {
  group pools "NODE POOLS" layout=grid cols=2 gap=16 {
    nv   "4  NVIDIA nodes, gpu=on\nhami-device-plugin DaemonSet\ndevice-plugin + vgpu-monitor :9394" .green row=0 col=0
    core "5  libvgpu.so in the pod\nvia /etc/ld.so.preload\ncaps memory, paces compute" .yellow row=1 col=0
    oth  "Ascend / Kunlunxin / Hygon\nown limiter: vNPU-Core,\nvXPU, vDCU" .green row=1 col=1
  }
  group obs "OBSERVE AND SELL" layout=column gap=16 {
    prom "6  Prometheus\n:9395 reserved\n:9394 used"
    out  "allocation vs utilization\nKEDA scaling\nmetering, billing"
  }
}

ns -> pod
pod -> wh flow=forward
pod ..> dra
wh -> sch flow=forward
sch .. bs arrow=none
sch -> nv flow=forward
dra ..> nv
nv -> core flow=forward
nv -> prom flow=forward flow-speed=2s
sch -> prom flow=forward flow-speed=2s
prom -> out

HAMi blueprint flow