複数の送り元から来る Art-Net を、送り元ごとに見分けて合成し、1 本にして送り直す社内アプリ / 版 2026-10-17(ビルド 26 10/17 11:46)/ スタッフ限定・社外に出さないこと
資料: このページの PDF 版 / 編集用 Word 版
動画は同じパソコンの中(127.0.0.1)だけで、試験用の送り元 3 台から受信ポート 6464 へ送り、合成した結果を 127.0.0.1:6454 の ArtNetMonitorM5 で見ています。操作はすべて HTTP の窓口(127.0.0.1:55700)から行い、マウスは使っていません。音声: VOICEVOX:No.7
卓や再生機など、同じユニバースを複数の機器が送ってくると、受け側(LjStudio の単独 Visualizer)は「最後に届いた 1 枚」で上書きするだけなので、届くたびに値が入れ替わってちらつきます。ArtNetMerger はその前に置く中継です。
127.0.0.1:6454)へ送り直す。使い方の例: 卓 2 台(メイン/バックアップ)の切り替えは「単独」、卓 + 別の再生機の重ね合わせは「HTP」。
そのほか、次のことを自動でします。
スタートメニューの「ArtNetMerger」を開きます。1 台の PC で起動できるのは1 本だけです(2 本目を開くと「既に起動しています」と出ます)。

初めて起動すると、既定値で「動作中」になります(受信 0.0.0.0:6454(すべての口)、送り先 127.0.0.1:6454)。窓の位置・大きさ、受信口、送り先、送り元ごとの有効/優先順、ユニバースごとの合成のしかた、動作中か停止中かは、閉じるときに覚えて、次も同じ状態で始まります(exe と同じフォルダの config.json)。

| 番号 | 部品 | 役目 |
|---|---|---|
| 1 | 受信 / ポート | Art-Net を受ける口。「0.0.0.0(すべての口)」、この PC の各 IP、「127.0.0.1(この PC の中だけ)」から選ぶ |
| 2 | 送り先 / ポート | 合成した結果を送る先。既定は同じ PC(127.0.0.1)。IP は直接打ち込める(履歴 12 件) |
| 3 | ▶ 開始 / ■ 停止 | 受信と合成を始める/止める。受信・送り先を変えたら「適用」を押す |
| 4 | 動作の表示 | 動作中なら「受信 … → 送り先 …」が緑で出る。停止中は灰色 |
| 5 | 設定の行 | 「新しい送り元を有効で迎える」「雑音除去」「来なくなったら外す(ms。既定 2000)」「来ていない送り元を消す」 |
| 6 | ユニバース表 | ユニバース(U)ごとに、合成のしかた(ここで選ぶ)・合成中の台数(合成中 / 来ている送り元)・送出 fps・送出数・値が 0 でない ch の数(非0)・出力 ch1-16。送っていないユニバースは灰色で「(送っていない)」 |
| 7 | 送り元表 | 送り元 × ユニバースの 1 行。有効(チェック)・U・優先・送り元・名前・状態・fps・受信数・捨て(雑音除去で捨てた数)・最終(最後に届いてからの時間)・非0・ch1-16。「名前」は相手が ArtPollReply を返したときだけ出る |
| 8 | ▲ 優先を上げる / ▼ 優先を下げる | 選んだ送り元の優先順を動かす(「単独」のときに効く) |
| 9 | いちばん下の帯 | 受信数・「自分の送出を無視」の数・HTTP の口。エラーがあれば先頭に★で出る |
「状態」の列は 4 種類です。合成中(出力に使われている)/ 待機(来ているが、いまは使われていない。「単独」で優先が下の台など)/ 無効(チェックが外れている)/ 来ていない(2 秒以上届いていない)。
送り元表の左端のチェックで切り替えます。無効にすると、その送り元の値は出力から消えます(すぐ反映)。チェックは送り元 × ユニバースごとです。

初めて見る送り元は、「新しい送り元を有効で迎える」(既定オン)に従って、最初から有効で並びます。オフにすると、新しい送り元は無効で並ぶので、チェックを入れるまで出力に混ざりません(現場で知らない機器が増えても混ざらないようにしたいとき)。
相手の IP で見分けます。送信元ポートが 6454 以外のときは「IP:ポート」で別の送り元にします(同じ PC の 2 つのアプリが別々に送るとき用。卓や Node はふつう 6454 から送るので IP だけになります)。送り元のアプリを起動し直して送信ポートが変わると、別の送り元として並び、古い行は「来ていない」になります。

「来ていない送り元を消す」ボタンは、10 秒以上届いていない送り元を一覧と覚えから消します。「来なくなったら外す」の時間(既定 2000ms。100〜60000)は、出力から外す時間で、消す時間とは別です。
ユニバース表の「合成」の欄で、ユニバースごとに選びます(U ごとに別のしかたにできます)。
| しかた | 動き | 向いている使い方 |
|---|---|---|
| HTP(大きい方) | ch ごとに、有効で来ている送り元のうちいちばん大きい値を出す | 卓 + 別の再生機など、重ねて使う |
| LTP(最後に動いた方) | ch ごとに、最後に値が動いた送り元の値を出す(同時なら大きい方) | 後から触った側を優先したいとき |
| 単独(優先 1 台) | 有効で来ている送り元のうち、優先順がいちばん上の 1 台だけを通す。その台が来なくなったら、次の順位へ自動で切り替わる | メイン/バックアップの卓の切り替え |

送り元表で行を選び、▲ 優先を上げる / ▼ 優先を下げるで順位を入れ替えます。「優先」の列の 1 がいちばん上です。「単独」では、1 位が「合成中」、ほかは「待機」になります。


ArtNetMerger の送り先は既定の 127.0.0.1:6454 のままにして、Visualizer を次のように起動してこの PC の中だけで受けさせます。
LjStudio.App.exe --form LJSVISUALIZER --bind 127.0.0.1
127.0.0.1:6454 のとき、窓の下の帯にも同じ注意が出ます。受信口と送り先のポートは、変えられます。ほかのアプリが 6454 を使っているときなどは、ArtNetMerger の受信を別のポート(例 6464)にして、送り元をそのポートへ送らせる、送り先も別のポート(例 6465)にして、受け側もそのポートで待たせる、というように分けます。受信口を「すべての口 0.0.0.0」にするか、特定の IP にするかも、ここで選びます。
受信と送り先を同じポート・同じ PC にしても、自分の送出を拾って暴走することはありません(下の帯の「自分の送出を無視」に数が出ます)。
| 症状 | 見るところ・直しかた |
|---|---|
| 送り元表に何も出ない/下の帯の「受信」が 0 のまま | 「停止中」になっていないか(▶ 開始)。受信の口とポートが、送り元の送り先と合っているか。受信口を 127.0.0.1 にしていると、他の PC からは届かない。ほかのアプリが同じポートを先に使っていると「★」のエラーが出る |
| 送り元が出ているのに Visualizer が光らない | 送り先のポートと IP を確認(「動作中 受信 … → 送り先 …」の緑の表示)。ユニバース表で、そのユニバースが「(送っていない)」なら、有効で来ている送り元が無い(チェック・「状態」を確認)。Visualizer を --bind 127.0.0.1 で受けさせているか |
| 送り元が一覧から消えず増えていく | 送り元のアプリを起動し直すと送信ポートが変わり、別の送り元として並ぶ。「来ていない送り元を消す」で整理する |
| 送り元が急に「来ていない」になる | 2 秒(「来なくなったら外す」の時間)届かないと外れる仕様。送り元の機器・ネットワークを確認。時間を伸ばすこともできる |
| 「捨て」の数が増える | 雑音除去が、壊れたフレームを送り元ごとに捨てた数。ときどき増えるだけなら問題ない。増え続けるなら、その送り元の機器やケーブルを疑う。切りたいときは「雑音除去」のチェックを外す |
| 「自分の送出を無視」の数が増える | 送り先が自分の受信口と同じため、自分が送ったものが戻ってきたのを捨てている。正しい動作で、送り元の行には出ない |
| LTP で意図しない値になる | 5 章の注意。HTP か単独に切り替える |
| 起動すると「既に起動しています」と出る | すでに 1 本動いている(タスクバー・最小化を確認) |
ArtNetMerger は、AI(Claude Code など)が読み取って操作できます。人が画面を触るのと同じことが、HTTP でできます。動画の操作もすべてこの方法で行っています。
1 秒ごとに e:\tmp\ai_artnetmerge\ へ出ます。
| ファイル | 内容 |
|---|---|
latest.txt | 人と AI が読む要約。送り元ごとの有効・状態・fps・受信数・捨て数・ch1-16、ユニバースごとのモード・送出数・出力 ch1-16 |
status.json | 同じ内容の構造化データ(httpPort に HTTP の実ポート) |
README_AI.txt | AI 向けの操作の説明 |
127.0.0.1:55700(使用中なら 55701〜55705。実ポートは status.json の httpPort)。GET でも POST でも同じに動きます。この PC の中からだけ使えます。
| パス | 内容 |
|---|---|
/status | 送り元・ユニバース・合成結果の一覧 |
/start /stop | 受信と合成を始める/止める |
/source?key=<IP または IP:ポート>&universe=0&enabled=0|1 | 送り元の有効/無効 |
/move?key=…&universe=0&dir=up|down | 優先順を上げる/下げる |
/mode?universe=0&mode=htp|ltp|single | 合成のしかた |
/dest?ip=127.0.0.1&port=6454 | 送り先 |
/bind?ip=0.0.0.0&port=6454 | 受ける口(動いていれば開き直す) |
/options?newEnabled=0|1&glitch=0|1&timeoutMs=2000&maxFps=44 | 各種設定 |
/forget?olderMs=10000 | 来なくなった送り元を一覧と覚えから消す |
curl -s "http://127.0.0.1:55700/status" curl -s "http://127.0.0.1:55700/mode?universe=0&mode=single" curl -s "http://127.0.0.1:55700/source?key=127.0.0.1:50191&universe=0&enabled=0" curl -s "http://127.0.0.1:55700/move?key=127.0.0.1:50192&universe=0&dir=up"
key には、送り元表の「送り元」の文字(IP、または IP:ポート)をそのまま入れます。まだ来ていない送り元を指定すると、エラー(404)が返ります。
止まっているときや再ビルドは、AI が tools/restart_app.ps1 -AppName ArtNetMerger で強制停止 → ビルド → 起動できます(開発担当の作業です)。
ArtNetMerger 2026-10-17 / スタッフ限定。図と動画の画面は、127.0.0.1 の中だけで試験した画面です(図は動画の録画から切り出したもの)。