メインコンテンツへスキップ
この頁は、livlive-kit の reference/ops.json から自動で作っています。いま呼べる操作は livlive ops か GET /api/ops が答えます。CLI と MCP は、同じ内容をエージェント向けに持っています。livlive-kit はまだ外の人には公開していません。書かれている説明は、元の言葉のままです。
操作は 40 個。ハッシュ: 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.

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.

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.

asset.unplace

外す ・ project: true Make the next version with the picture taken off the content’s 表紙 (cover). Nothing else changes.

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).

script.cast

キャストを変える ・ project: true Make the next version of the content with another cast (the first is the lead; who stays keeps their part).

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.

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.

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.

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.

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.

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 上へ / 下へ.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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. 入力の項目はありません。

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 直す所).

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.

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 }.

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.

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.

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. 入力の項目はありません。

stage.create

ステージを作る ・ project: false Make a stage (input.name), with no space yet. Answers data { id, name }. Free; no project.

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.

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.

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.

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.

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.

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.

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.