この頁は、livlive-kit の
reference/ops.json から自動で作っています。いま呼べる操作は livlive ops か GET /api/ops が答えます。CLI と MCP は、同じ内容をエージェント向けに持っています。livlive-kit はまだ外の人には公開していません。書かれている説明は、元の言葉のままです。333e4126170b
asset.choose
これを使う ・ project: true
Choose one candidate of an asset and make it an asset. If it was made for a stretch of the content, the next version with it placed there is made too.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
asset.shelve
参照アセットに追加 ・ project: true
Make the next version with the chosen asset added to the current version’s reference assets. It is named at no stretch (the show may pick it when it fits). A sound joins as a bed (BGM, looped) unless jingle: true, which keeps it as a jingle (区切りの音 — a short sting sounded once, e.g. at the boundaries between stretches); jingle: true is refused for anything but a sound, and for a sound longer than a jingle may be — 15 s at most, its length measured.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
asset.place
置く ・ project: true
Make the next version with the chosen asset placed at a place of the current content: a stretch (named as that stretch’s 資料, 曲 or ジングル), the content’s サムネイル (thumb) or 表紙 (cover — the opening card’s picture), which take an image, or 区間 0’s 絵 (standby — an image) or BGM (standby_bgm — a sound). A sound placed is held on the reference assets too; a ジングル is 15 s at most, its length measured.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
asset.unplace
外す ・ project: true
Make the next version with the picture taken off the content’s 表紙 (cover). Nothing else changes.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.save
保存 ・ project: true
Keep the content edited on the screen as the next version (the old version stays). meta.title and meta.cast stay the base’s: leave them out or write the same (another is refused — the title changes by script.content, the cast by script.cast).
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.cast
キャストを変える ・ project: true
Make the next version of the content with another cast (the first is the lead; who stays keeps their part).
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.length
長さを決める ・ project: true
Make the next version of the content with its length set (how many minutes). The stretches and words stay; do not ask ツヅリ to rewrite for it.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.channels
チャネルを変える ・ project: true
Make the next version of the content going out on these channels (YouTube 配信, アプリ配信 …). The stretches and words stay; its 届け方 follows the channels.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.stage
ステージを替える ・ project: true
Set the stage the content is performed in, or take it off (“none”). With a content: the next version says the stage; the stretches and words stay (do not ask ツヅリ to rewrite unless the person wants it). Before any content: the stage the first content is written for.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.stretch
区間を直す ・ project: true
Change one field of one stretch on the room’s screen: its name, purpose, time in minutes, fixed lines or free talk, speaker, ending, its fixed lines, its references, whether it takes viewers’ comments (comments), or whether it takes 知らせ from outside (notices). The person does this on the panel; ask ツヅリ for rewrites instead.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.content
コンテンツを直す ・ project: true
Change one property of the content on the room’s screen: its title, its topic, a role’s description, which role runs it, one reference joined to every stretch, or the workspace’s 外部連携 (outside senders, by id) whose 知らせ it takes. The person does this on the panel; ask ツヅリ for rewrites instead.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.move
区間を動かす ・ project: true
Move one stretch to another place in the order, on the room’s screen. The person does this in the rail’s コンテンツ: drag its row, or its 「⋯」‘s 上へ / 下へ.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.drop
区間を削除 ・ project: true
Delete one stretch, on the room’s screen; its time leaves the length with it. The person does this in the rail’s コンテンツ (its row’s 「⋯」 › このセクションを外す); 元に戻す brings it back.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.block
ブロックを直す ・ project: true
Change one stretch’s blocks by one patch, as the next version, on the room’s screen. Blocks are numbered from 1 (stretch is the stretch’s number). Patches: add { after } — a blank block after that block (0 = at the head; left out = at the end); a stretch with no blocks first becomes its own block 1 (its name and purpose); drop: k — block k taken off (when the one left is the stretch’s own, the stretch has no blocks again); move { block, by } — one place up (-1) or down (1); set { block, name, aim, until, line, seconds, spare, show, caption } — fields of one block: its name, its one point (aim), how it ends (until: goal — its aim met —, lines — its reference line said —, or time — only in a live group), its reference line, its approximate length in seconds (a weight: the stretch’s time is dealt in this ratio), spare (taken only when time is left), its slide (show: a list — the first item is what the block shows: a shelf id, “off” for nothing, or words asking for a slide) and its caption (caption: a list of words) each replacing the cell; null or false takes a field off; group { mode, items, seconds } — how the blocks repeat: prepared (once per item, items one per round) or live (for seconds). A patch that leaves a block without its name or aim, a lines end without its line, time outside a live group, or a prepared group without items is refused, said; a new block stays blank until a set names it. A stretch of fixed lines takes no blocks. The person does this in the rail’s コンテンツ (a stretch’s 「⋯」 › ブロックを足す, a block’s 「⋯」 › 上へ / 下へ / このブロックを外す) and on the stretch’s and the block’s panels.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.restore
前のバージョンに戻す ・ project: true
Make the next version of the content with an earlier version’s content back: its stretches, words, length and what was put in its stretches. The cast, stage, チャネル, サムネイル, 表紙, 見た目 and material stay as they are now. Every version stays, so going back can itself be undone.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.undo
元に戻す ・ project: true
Take back the last change to the content: the next version equals the version before the one now (after a 元に戻す, the one before what it brought back) — its stretches, words, title, cast, material and pictures. The person presses it on the room’s screen.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.bgm
BGM を決める ・ project: true
Make the next version with one gesture on the content’s BGM lane. The lane runs over 区間 0 (はじまる前, index -1 = 区間 0) and every stretch (index 0 = stretch 1, 1 = stretch 2, …). Gestures: set {from, to, value} gives the stretches from..to one value, written on each of them — “off” (no music there), {track: id} (that track plays there; it must be a bed of the content’s palette: its own beds, else the platform’s) or {auto: words} (おまかせ: the show picks a track by the words while it plays; nothing is made); 区間 0 takes a track or “off”, never おまかせ; quick “none” (no music anywhere), “part” (the first track on stretch 1 only) or “all” (the first track everywhere, 区間 0 included); jingle true / false (the jingle at every boundary from stretch 1 → 2 on; at the curtain’s lift the character’s own entrance sound plays). A stretch the gesture does not cover keeps what it plays. To have a new track made, ask for one; this only arranges the tracks the content can play.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
desk.pick
選ぶ ・ project: true
Change the picks for what is made next (the cast, where the first content goes, the content’s material, the version to revise, what to make from). They stay in the room as the person’s picks, the same as the screen’s.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.first
最初のバージョンを置く ・ project: true
Save the 構成表 you wrote (input.structure, the shape script.save takes) as the room’s first version, with its cast (the lead first) and, if you name it, the template it follows. title and cast set the sheet’s meta.title / meta.cast: leave those out or write the same (another is refused). Only while the room has no content, and once its 要望 is written and answered (request.write first — with no person to answer, with no proposals); after that, script.save makes each next version. Give requestId (a uuid of yours) so a retry answers the version it made, and research (ids of the room’s research, e.g. made.research of research.bring) for what it was written from — the version holds them. It is checked as every write is (shape, camera names, caps, fields the sheet does not read): a problem refuses it, said in left; nothing is cut or dropped.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
research.bring
調べた事を持ち込む ・ project: true
Bring research you did into the room as a finished research: its title, its purpose and the facts, each with its source (an http or https address) and confidence (“true” checked, “unverified” not yet). A fact without a readable source is refused. Nothing is searched and nothing is paid; the room’s writer reads it as any research of the room. Answers made.research.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
request.write
要望をまとめる ・ project: true
Write the room’s 要望 (request memo) before the first content: memo is Markdown whose ## headings are its sections (the client’s words, and what you propose for what was not said); proposals name the sections still to be answered, each heading a ## section of the memo, with up to three other words for it. A section the person already settled stays exactly as it is and is never proposed again. With no person to answer, write it with no proposals. Only while no content has been written; after that it is read only.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
request.edit
要望を直す ・ project: true
Change the room’s 要望, one thing at a time: { take: heading } settles a proposal as it is; { section: heading, words } replaces that section’s words and settles it; { memo } rewrites the whole memo (a proposal whose section changed is settled); { bring: assetId } hands one of the workspace’s own assets over as a 参考資料; { drop: assetId } takes one off. A standing 「この内容で作る」 offer is withdrawn: it is offered again from the changed 要望. Only while no content has been written.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
pitch.put
企画書を置く ・ project: true
Put the 企画書 you wrote for this room: title, doc (Markdown; its ## headings are its sections, each once), answers (for each 要望 heading or 参考資料 id, the section that answers it, and how in a few words), research (ids of the room’s research it was written from). Only after the 要望 is written and answered, and before the first version (script.first waits for it); refused once the content is written. Nothing is researched or written for you, and nothing is paid.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
asset.bring
文章を持ち込む ・ project: true
Bring a text or markdown you wrote into the room as an asset (no file is uploaded): its kind, title, words and use (intro, setting, memo or quote). It is placed nowhere; asset.shelve with { asset: made.asset } puts it on the content’s 参照アセット. If you wrote it from the room’s own research, 構成表 versions or 素材, name them in from (their ids, at most 6 — e.g. made.research of research.bring): the room keeps what it was made from. An id the room does not hold refuses the bring, naming it; nothing is written.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
room.open
部屋を開く ・ project: false
Open a new production room (no project needed). Writes the room’s row only — nothing paid, no talk. Answers data.project, the new room’s id.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
room.read
部屋を読む ・ project: true
Read the room: data.versions [{ id, no, title, research }] (research: the ids the version was written from), data.current (the current 構成表 version id, null before any), data.structure (the current version’s 構成表 as livlive reads it — the base for script.save; null before any), data.carries { brief, research }: what an ask made in this room carries (the content’s gist for an art ask, its outline for a research ask), data.recent: the room’s last 10 work records, newest first (op, runner, staff, skills read, what it made, credits, ok, what was left), and data.choices: the ids you may pick, as the room’s own pickers offer them — cast [{ id, name }] (desk.pick cast, script.first cast), forms [{ id, label }] for the picked channels and cast (desk.pick form, script.first form), channels [{ id, label }] (desk.pick channels). data.request is the room’s 要望: memo (Markdown; null before it is written), sections [{ heading, words }], proposals [{ heading, others }], settled (the headings the person answered — keep their words as they are when you write it again), open (the proposals still waiting for the person), brought (the 参考資料 asset ids), editable (false once the content is written, or while it is being written: request.write and request.edit then refuse). data.pitch is the room’s 企画書 (put it with pitch.put after the 要望, before script.first): title, doc (Markdown; null before one is put), sections [{ heading, words }], answers [{ to, section, how }], current (false while none, being made, or 書き直し待ち), stale with changes (what moved since it was written: the 要望 or the 形), editable.
入力の項目はありません。
入力のスキーマ(JSON)
入力のスキーマ(JSON)
script.check
構成表を確かめる ・ project: true
Check a 構成表 (input.structure) without saving it — script.save’s checks (shape, camera, limits, dropped — a field written in a shape the sheet does not read), with the same rule the write uses: ok when script.save would take it, else each refusing problem in left (why = the check). data.problems lists every finding, the ones that do not refuse too (the screen’s 直す所).
入力のスキーマ(JSON)
入力のスキーマ(JSON)
skills.read
スキルを読む ・ project: false
Read one staff member’s skills (input.staff): the base skills and the user’s own, each with id, name, version, body and words (title ・ summary ・ guide — what people see; an own skill made before 2026-10-26 may have none); an own skill also its description (when to read it). No project needed (one given is ignored). An own skill’s id and version (a number) are what skills.edit and skills.publish take.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
skills.add
スキルを足す ・ project: false
Add one of the user’s own skills (a カスタムスキル) to a staff member (input.staff): name, description (when to read it), body (Markdown, the craft) and words { title, summary, guide } — the words people see, all required, written by you. A refusal says why in left[].say; fix and send again. Free; no project. Answers data.skill { id, staff, name, version, words }.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
skills.edit
スキルを直す ・ project: false
Change one of the user’s own skills (input.id, from skills.read) as a whole (input.staff, its staff member; input.version, the version read — a newer one is never overwritten): name, description (when to read it), body (Markdown, the craft) and words { title, summary, guide } — the words people see, all required, written by you. A refusal says why in left[].say; fix and send again. Free; no project. Answers data.skill with its new version.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
skills.publish
スキルをマーケットに出す ・ project: false
Send one of the user’s own skills (input.id and input.version, from skills.read) to the operator’s review for the market, at the price the user sets (input.price, credits 0–1000, 0 = free; ask the user, never choose it). input.creatorName — the name buyers see, needed only when the workspace has none yet. The skill’s body is never shown to buyers: they see its words (title ・ summary ・ guide). A workspace’s first publish is made on the page (the user ticks the terms there), never here. A refusal says why in left[].say. Answers data { item, version, state }. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.list
ステージを見る ・ project: false
List your stages: data.stages [{ id, name, space: { id, at } | null (the space it draws), item (the market item it wears, or null) }]. Free; no project.
入力の項目はありません。
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.create
ステージを作る ・ project: false
Make a stage (input.name), with no space yet. Answers data { id, name }. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.read
ステージを読む ・ project: false
Read a stage (input.stage) as the engine reads its registered space: data { space: { id, at }, things [{ id, name, about, can, seat, hidden? }], walk (the floor box a body may stand in — the engine’s frame, placed by the spawn, m), cameras [names], seats [{ id, x, z, out, height { min, max } }], switches [{ id, on (at the start) }], placements [{ id, from, at, heading }] — seats and placements in the room’s frame, as world.json writes them }, or data { space: null } when it has none. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.space.upload
空間のファイルを送る先 ・ project: false
Where to send one GLB of a stage package (input.stage; input.fingerprint ‘sha256-<hex of the file’s bytes>’; input.bytes): data { url, path } — PUT the file’s bytes to data.url (it only creates) — or data { exists: true, path } when the same bytes are already there. One per GLB: room.glb and each things/<name>/thing.glb. The bytes never travel through this op or an MCP tool: the CLI (livlive stage push <folder>) sends them by HTTP PUT. Refused (door.run_live) while a run is on the stage. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.space.push
空間を渡す ・ project: false
Register a stage package as the stage’s space — the page’s registration itself, every check it runs: input { stage, path and fingerprint (room.glb’s, from stage.space.upload), world (world.json), manifest? (manifest.json), things? [{ name: ‘things/<name>’, path, fingerprint, thing (thing.json) }], keeper? { source (keeper.js), manifest (keeper.json) }, layers? { <layer id>: { <file>: content } } (the reference’s layers past room, things and keeper) }. Taken: data.space.id — the stage draws it at once. A refusal changes nothing and answers ok false with problems [{ code, words }] (left says the same); fix and push again. Refused (door.run_live) while a run is on the stage. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.space.check
空間を確かめる ・ project: false
Every check stage.space.push runs, on the same input, and the stage left as it is; upload the GLBs first with stage.space.upload, as for a push (a live run on the stage refuses the upload, so check between runs). The uploaded GLBs stay for the push that follows; one that can never be used (too large, not its fingerprint’s bytes) is removed. Answers data { summary } or every problem with its code.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.rules.check
ルールを確かめる ・ project: false
Check a game’s built rules (keeper.js + keeper.json, as livlive game build writes them) as registration does — the declaration, the size, the box opening, reset and step; given the world, also the dry run at the fewest and the most players and the seats. Nothing is kept. input { keeper: { source: keeper.js, manifest: keeper.json, parsed }, world?: world.json, parsed }. Answers data { bytes } or every problem with its code.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.face.upload
一枚絵を送る先 ・ project: false
Where to send the stage’s 一枚絵 — its key picture, face/picture.png, .jpg or .webp in the folder (PNG / JPG / WebP, ≤ 10 MB): input { stage, fingerprint ‘sha256-<hex of the file’s bytes>’, bytes, type ‘png’ | ‘jpg’ | ‘webp’, replace? } → data { url, path } — PUT the file’s bytes to data.url (it only creates) — or data { exists: true, path } when the same bytes are already there. Then name data.path as stage.face’s picture. Say replace: false when the person did not ask to replace the stage’s 一枚絵: a 一枚絵 already set — by the person on the stage page, or by an earlier send — is then left as it is, data { kept: true, exists: true }, no url and no path; send no bytes and no picture. Send replace: true only when the person asked to replace it — never on your own. Without replace the address is given as for replace: true, and stage.face keeps a set 一枚絵 unless its replace names picture. The bytes never travel through this op or an MCP tool: the CLI (livlive stage push <folder>) sends them by HTTP PUT. Refused (door.run_live) while a run is on the stage. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
stage.face
一枚絵・ひとこと・色・世界観を付ける ・ project: false
Set the stage’s face — what its page shows and its performers read: input { stage, picture? (data.path from stage.face.upload), note? (its ひとこと, ≤ 80 characters), tone? (its 色: ao, ai, sumire, kurenai, kohaku, kin, midori, hai), world? [{ name: ‘<name>.md’ (letters, digits, . _ -), md: Markdown ≤ 20000 characters }] (its 世界観 documents, ≤ 64 documents, ≤ 200000 characters together), replace? [‘picture’ | ‘note’ | ‘tone’ | ‘world’] }. It fills only what is empty on the stage — no 一枚絵, no ひとこと, no 色, no 世界観 document of that name; a field already set — by the person on the stage page, or by an earlier send — is kept as it is. Name a field in replace only when the person asked to replace it — never on your own. Answers data { set, kept }: the fields written and the fields left as they were, each ‘picture’, ‘note’, ‘tone’ or ‘world/<name>’. A refusal answers ok false with problems [{ code, words }] (left says the same). A refusal before anything is written changes nothing: fix and send again. A store failure (door.store_failed, face.world_failed) may leave part written — data.set says what (a picture may already be on the stage’s shelf though data.set does not name it, when a write after it failed); send the same again: the same picture is used, what was written is then kept and the rest filled. The picture first goes up through stage.face.upload: The bytes never travel through this op or an MCP tool: the CLI (livlive stage push <folder>) sends them by HTTP PUT. Refused (door.run_live) while a run is on the stage. Free; no project.
入力のスキーマ(JSON)
入力のスキーマ(JSON)
