digraph { rankdir=LR subgraph cluster_back { label="Back" style=bold color=grey //cam01 [label="DV cam" style=dotted] mic0 [label="Microphone" style=dotted] cam1 [label="Webcam"] cam2 [label="Webcam"] cam3 [label="Webcam"] cam4 [label="Webcam"] cam5 [label="Webcam"] cam6 [label="Webcam"] cam7 [label="Webcam"] cam8 [label="Webcam"] pc1 [shape=box label="Auto mixer + raw streaming\nMicro-PC"] pc2 [shape=box label="Auto mixer + raw streaming\nMicro-PC"] pc3 [shape=box label="Auto mixer + raw streaming\nMicro-PC"] pc4 [shape=box label="Raw streaming\nMicro-PC"] mon1 [shape=hexagon label="Auto-mix display\nMonitor"] mon2 [shape=hexagon label="Auto-mix display\nMonitor"] mon3 [shape=hexagon label="Auto-mix display\nMonitor"] mon00 [shape=hexagon label="Simple display\nMonitor"] mon01 [shape=hexagon label="Live-mix display\nMonitor"] pc1 -> mon1 [label="HDMI" fontsize=9] pc2 -> mon2 [label="HDMI" fontsize=9] pc3 -> mon3 [label="HDMI" fontsize=9] cam1 -> pc1 [label="USB" fontsize=9] cam2 -> pc1 [label="USB" fontsize=9] cam3 -> pc2 [label="USB" fontsize=9] cam4 -> pc2 [label="USB" fontsize=9] cam5 -> pc3 [label="USB" fontsize=9] cam6 -> pc3 [label="USB" fontsize=9] cam7 -> pc4 [label="USB" fontsize=9] cam8 -> pc4 [label="USB" fontsize=9] {rank=max; mon00 mon01 mon1 mon2 mon3} //{rank=min; mic0 cam01 cam1 cam2 cam3 cam4} {rank=min; mic0 cam1 cam2 cam3 cam4} } subgraph cluster_top { label="Roof" style=bold color=grey cam00 [label="Outdoor cam" style=dotted] } subgraph cluster_front { label="Front" style=bold color=grey mon02 [shape=hexagon label="Video mixer console\nMonitor + keyboard"] //pc22 [shape=box label="Video mixer console\nLaptop" style=dotted] amix [shape=box label="Audio mixer console" style=dotted] } vid0 [label="Video recording\nDocument" style=dotted] pc0 [shape=box label="Live mixer\nPC"] sw0 [shape=box label="Switch"] pc10 [shape=box label="Compressed streaming\nPC"] pc80 [shape=box label="Website"] pub1 [shape=hexagon label="Web browser"] cam00 -> mon00 [style=dotted constraint=false] mic0 -> amix [style=dotted] amix -> pc0 [label="Phono" fontsize=9 style=dotted constraint=false] vid0 -> pc0 [label="Disk" style=dotted fontsize=9] pc0 -> mon01 [label="DVI" fontsize=9] pc0 -> mon02 [label="VGA + PS/2" fontsize=9] pc10 -> pc80 [label="Cellular net" fontsize=9] pc80 -> pub1 [label="Internet" fontsize=9] {pc1 pc2 pc3 pc4 pc0 pc10} -> sw0 [taillabel="Ethernet" fontsize=9 dir=none constraint=false] //sw0 -> pc22 [label="Ethernet" fontsize=9 dir=both style=dotted constraint=false] //cam01 -> pc0 [label="firewire" fontsize=9 style=dotted constraint=false] {rank=same; pc0 pc10 pc80 sw0} }