AV SIGNAL FLOW · 系統図

Wiring you can write.

Describe connections port to port and get SVG. It does more than draw: it flags the cable that seats perfectly and carries nothing before anyone reaches site.

38 signal types7 packagesMIT
studio.khmclean
device cam "SONY FX3"  as camera   { out SDI : sdi }
device sw  "ATEM Mini" as switcher { in 1..4 : sdi  out PGM : sdi }
device rec "HyperDeck" as recorder { in SDI : sdi }

cam.SDI -> sw.1    : sdi 30m "V-01" [color=青]
sw.PGM  -> rec.SDI : sdi 2m  "V-10"
output
V-01 30mV-10 2mSONY FX3SDIATEM Mini1234PGMHyperDeckSDI

WHAT IT CATCHES

It fits. It does nothing.

The faults worth catching are the ones where the plug seats, the drawing looks right, and no signal arrives. Every verdict carries its reason, and the reason follows through into the cable schedule.

warning ext.CAT → netsw.1HDBaseT uses Cat cable and RJ45 but is not Ethernet. It does not go into a switch
warning cam.SDI → sync.REFThey only share BNC. A reference input will not lock to video
warning cdp.ANALOG → dac.DIGITALThey only share RCA. Analogue audio into a S/PDIF input produces nothing
warning pc.HDMI → mon.DVINeeds an HDMI-DVI cable. Declare it with via and it lands on the parts list
warning desk.MAIN → amp.LINEBalanced to unbalanced: level drop and hum-loop exposure

HOW IT READS

What you write is what comes out.

Every diagram below was compiled at build time by the published package from the source beside it.

Ports and ranges

CH[1..16] expands to sixteen. Declaration order is drawn, so IN 1 never ends up below IN 2.

ports.khmclean
device mixer "Yamaha DM3" as mixer {
  in  CH[1..16] : xlr
  out L, R      : xlr
  io  DANTE     : dante
}
device amp "アンプ" as amplifier { in IN_L, IN_R : trs }

mixer.(L, R) -> amp.(IN_L, IN_R) : trs 3m "A-10"
output
A-10 3mA-10 3mYamaha DM3CH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LRDANTEアンプIN_LIN_R

Wireless

A radio path is not a cable, so it carries a frequency where a cable carries a length. Wire it straight into the desk with no receiver and you get told.

wireless.khmclean
device mic "ワイヤレスマイク" as microphone { out RF : uhf }
device rx  "受信機"           as interface  {
  in  RF  : uhf
  out CH1 : xlr
}
device desk "卓" as mixer { in CH1 : xlr }

mic.RF -> rx.RF     : uhf [ch=38]
rx.CH1 -> desk.CH1  : xlr 3m "A-01"
output
ch 38A-01 3mワイヤレスマイクRF受信機RFCH1CH1

Equipment libraries

A desk's sixteen channels do not get rewritten per drawing. Define it once with model, instantiate as many as you like with device … from.

library.khmclean
model dm3 "Yamaha DM3" as mixer {
  in  CH[1..16] : xlr
  out L, R      : xlr
  @vendor "Yamaha"
}

device foh from dm3
device mon from dm3 "モニター卓"
output
Yamaha DM3CH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LRモニター卓CH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LR

LIVE

Write it here.

Type on the left, watch the right. Click a diagnostic to jump to the line.

Loading the editor…

INSTALL

Install it, write it.

terminal
# on the command line
pnpm add -D @love-rox/kumihimo-cli

kumihimo build studio.khm -o studio.svg
kumihimo check studio.khm
kumihimo export studio.khm drawio
markdown
# embedded in Markdown
pnpm add @love-rox/kumihimo-rehype

```kumihimo
cam.SDI -> sw.1 : sdi 30m
```
@love-rox/kumihimo-clibuild / check / export / watch
@love-rox/kumihimo-coreparser, validator, layout, SVG
@love-rox/kumihimo-editorembeddable live editor
@love-rox/kumihimo-rehypeMarkdown code fences
@love-rox/kumihimo-reactReact component
@love-rox/kumihimo-vueVue 3 component
@love-rox/kumihimo-astroAstro integration