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=blue]
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 "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 DM3CH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LRDANTEAmpIN_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 "Wireless mic" as microphone { out RF : uhf }
device rx  "Receiver"           as interface  {
  in  RF  : uhf
  out CH1 : xlr
}
device desk "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 3mWireless micRFReceiverRFCH1DeskCH1

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 "Monitor desk"
output
Yamaha DM3CH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LRMonitor deskCH1CH2CH3CH4CH5CH6CH7CH8CH9CH10CH11CH12CH13CH14CH15CH16LR

LIVE

Write it here.

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

Loading the editor…

VS CODE

In the editor you already use.

Install the extension and the diagnostics arrive as you type, with the diagram beside the source. The verdicts come from the same compiler as the ones above.

problems
warning ext.CAT → netsw.1HDBaseT uses Cat cable and RJ45 but is not Ethernet. It does not go into a switch
terminal
# in VS Code
code --install-extension love-rox.kumihimo-vscode

Latest release 0.10.2 · 2026-08-08View on the Marketplace

Diagnostics as you type

Not only syntax. A connection that seats perfectly and carries nothing is flagged, with its reason.

Preview beside the source

⌘K V opens it. It redraws as you type, follows your colour theme, and switches between the diagram and the cable, equipment and adapter schedules.

Completions from the compiler

Signal types, device kinds, jacket colours, themes. Every name offered is one the compiler accepts, with the connectors shown beside each type.

Follows your display language

The extension's own words and the compiler's sentences both follow VS Code, so neither ends up in a language the other is not in.

OBSIDIAN

In the note itself.

A code block becomes the diagram it describes. The same compiler runs, so a diagram written in a note opens anywhere else unchanged.

note.md
# in a note
```kumihimo
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=blue]
sw.PGM  -> rec.SDI : sdi 2m  "V-10"
```
output
V-01 30mV-10 2mSONY FX3SDIATEM Mini1234PGMHyperDeckSDI

Submitted to the community directory. Until it lands there, copy the three files from a release into your vault.Releases

Write it, see it

A ```kumihimo block becomes the drawing. ```khm does the same.

The schedules too

Cables, wireless, equipment and parts, folded up under the drawing — the same lists the job travels with.

Faults are named

A run that seats perfectly and carries nothing is reported under the drawing, with its reason. A note with a wrong diagram in it is worse than a note with none.

Works on a phone

The layout engine needs no worker, so this is not desktop-only.

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
```

Latest release 0.12.1 · 2026-08-08Changelog

@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
love-rox.kumihimo-vscodeVS Code extension (diagnostics, preview)