Skip to content

Reference Remote Script

Daisuke Tsukada edited this page Sep 5, 2026 · 2 revisions

Remote Script(LiveMCP_Probe)

Live の Python インタプリタ内で動く検証用 Control Surface です。M4L の LiveAPI ホワイトリストを経由せず Live モジュールに直接触れるため、M4L で不可能な操作(ステータスバー通知、ブラウザからの読み込み、Undo のまとめ)を確かめるために作りました。本番の Remote Script 版 LiveMCP は Issue #4 で計画中です。

導入

node scripts/install-remote-script.js

remote-script/LiveMCP_Probe/~/Music/Ableton/User Library/Remote Scripts/LiveMCP_Probe/ へコピーされます。Live を再起動し、環境設定 → Link/Tempo/MIDI の Control Surface で LiveMCP_Probe を選ぶと有効になります。

  • Live 12.4.5 の Remote Script は Python 3.11。外部パッケージは入れられません
  • コードを変えたら Live の再起動が必要です。Control Surface を入れ直しても Python モジュールが sys.modules に残ります
  • 有効になると probe-report.jsonSong のメンバー一覧、ブラウザの構造など)が Remote Script のフォルダに書き出されます

通信

TCP 127.0.0.1:3361(3360 は M4L 版が使用)。1 リクエスト 1 接続、JSON 1 行。ソケットは Live のメインスレッドから約 100ms 間隔で呼ばれる update_display の中で非ブロッキングに受けるため、LiveAPI をワーカースレッドから触りません。応答は最大 100ms 程度遅れます。

node scripts/remote-probe.js ping
node scripts/remote-probe.js tracks
node scripts/remote-probe.js message '{"text":"hello"}'
node scripts/remote-probe.js dir '{"target":"track","index":0}'
node scripts/remote-probe.js browser_load '{"name":"Simpler"}'

op 一覧

op 内容
ping 生存確認。ポートとレポートのパスを返す
api Song のメンバー一覧、can_be_savedfile_path
tracks トラックの index / name / is_grouped / is_foldable
group song.group_tracks(*args) を渡されたとおりに呼ぶ(Live の Python API に無いことを確認済み)
save song.save()(同じく無い)
undo 1 手戻す
message ステータスバーへ 1 行出す。ControlSurface.show_message 経由(Application.show_message を直接呼ぶと Boost.Python の型が合わず ArgumentError)
state トラック数、Undo / Redo 可否、開いているセットのパス
dir song / app / track(index) / view のメンバーを覗く
undo_step begin_undo_step / end_undo_step で 2 操作を 1 Undo にまとめる検証
browser_load ブラウザから名前でデバイスを探して Browser.load_item

分かったこと

M4L(LOM) Remote Script
ブラウザからの読み込み 不可 Browser.load_item
常駐 トラックにデバイスが必要。セットを切り替えると死ぬ Live 起動時から常駐
Undo 一括操作が件数ぶん積まれる begin_undo_step / end_undo_step で 1 手
deferlow 必須 不要
ステータスバー通知 不可 ControlSurface.show_message
Song.save / Song.group_tracks 無し 無し(Python API 自体に無い)

scripts/notify.jsliveMessage はこの Remote Script の message に投げています。Remote Script が動いていなければ何もせず、呼び出し側が標準出力に出します。

Clone this wiki locally