{"ok":true,"site":{"host":"dogaga.pages.dev","url":"https://dogaga.pages.dev/","type":"live","desc":"DOGAGA — a local-first WebMCP video editor where humans and browser agents edit the same live project state","tools":[{"name":"add_image_clip","kind":"act","impl":"imperative","description":"Add a loaded PNG/JPEG/WebP image Asset to a DOGAGA video track as a still clip. Images default to 5 seconds and may optionally receive a custom display duration. Use image Asset IDs and video track IDs from get_project_state. Still images support track moves, opacity/visibility, fades, and cross-dissolves, but not source trim, split, or playback speed.","inputSchema":{"type":"object","properties":{"assetId":{"type":"string","description":"Image Asset ID returned by get_project_state."},"trackId":{"type":"string","description":"Optional target video track. Defaults to V1."},"atIndex":{"type":"integer","minimum":0,"description":"Optional zero-based insertion index."},"durationUs":{"type":"integer","minimum":100000,"maximum":600000000,"description":"Optional display duration in microseconds. Defaults to the image asset's 5-second duration."}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_still_duration","kind":"act","impl":"imperative","description":"Change the display duration of an existing still-image clip in integer microseconds. This tool is image-only; video clips continue to use trim and playback-speed controls.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"durationUs":{"type":"integer","minimum":100000,"maximum":600000000}},"required":["clipId","durationUs"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_project_state","kind":"answer","impl":"imperative","description":"Read DOGAGA's current agent-safe editor state, including the Project Brief / destination, any current humanDemonstration captured through Teach by Example, any current reviewable edit plan, visual/audio tracks, canvas, loaded Asset IDs (video, image, or audio), clips, transitions, and playhead. Local File handles and object URLs are never returned. If humanDemonstration.status is ready, treat its semantic changes as a user-provided editing example: when the human asks to do the same or apply a similar treatment, infer analogous target assets or clips from the live state and use propose_edit_plan for multi-step application so the human can review it. A demonstrated add_visual_clip means the human intentionally added a loaded visual asset to a track with the captured duration/speed/fades; generalize that treatment to analogous loaded assets rather than replaying the original asset ID. When projectBrief.destination or projectBrief.goal is specific, compare that goal with the live state and proactively point out useful improvements. Do not automatically replay a human demonstration without review.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_track","kind":"act","impl":"imperative","description":"Add an empty video or audio track. DOGAGA generates a track ID; name is optional.","inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["video","audio"]},"name":{"type":"string","minLength":1}},"required":["kind"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_track","kind":"act","impl":"imperative","description":"Remove an empty non-default track. V1 and A1 cannot be removed.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string"}},"required":["trackId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_track","kind":"act","impl":"imperative","description":"Reorder a video or audio track within tracks of the same kind using a zero-based index. Higher video order renders above lower order.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string"},"toIndex":{"type":"integer","minimum":0}},"required":["trackId","toIndex"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_track_opacity","kind":"act","impl":"imperative","description":"Set a video track opacity from 0 to 1. Preview and export use this value for both video and still-image clips.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string"},"opacity":{"type":"number","minimum":0,"maximum":1}},"required":["trackId","opacity"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_track_visibility","kind":"act","impl":"imperative","description":"Show or hide a video track in preview and export, including any video or still-image clips on it.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string"},"visible":{"type":"boolean"}},"required":["trackId","visible"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_track_mute","kind":"act","impl":"imperative","description":"Mute or unmute an audio track in preview and export.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string"},"muted":{"type":"boolean"}},"required":["trackId","muted"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_clip","kind":"act","impl":"imperative","description":"Add a loaded video Asset to a video track. trackId is optional and defaults to V1. Use Asset and track IDs returned by get_project_state. Use add_image_clip for still-image Assets.","inputSchema":{"type":"object","properties":{"assetId":{"type":"string","description":"Loaded video Asset ID from get_project_state"},"trackId":{"type":"string","description":"Target video track ID. Defaults to V1 when omitted."},"sourceInUs":{"type":"integer","minimum":0},"sourceOutUs":{"type":"integer","minimum":1},"atIndex":{"type":"integer","minimum":0}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_clip","kind":"act","impl":"imperative","description":"Reorder an existing visual clip (video or still image) by zero-based index within its current video track.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"toIndex":{"type":"integer","minimum":0}},"required":["clipId","toIndex"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_clip_to_track","kind":"act","impl":"imperative","description":"Move an existing visual clip (video or still image) to another video track, optionally at a zero-based target index.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"trackId":{"type":"string"},"toIndex":{"type":"integer","minimum":0}},"required":["clipId","trackId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"trim_clip","kind":"act","impl":"imperative","description":"Set a video clip's source in/out range in integer microseconds. Still images do not have source trim; use set_still_duration instead.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"sourceInUs":{"type":"integer","minimum":0},"sourceOutUs":{"type":"integer","minimum":1}},"required":["clipId","sourceInUs","sourceOutUs"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"split_clip","kind":"act","impl":"imperative","description":"Split a video clip into two at a global timeline position. If timelineUs is omitted, DOGAGA uses the current playhead. The split stays in the same video track. Still-image clips are not split; change their duration instead.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"timelineUs":{"type":"integer","minimum":0,"description":"Global timeline position in microseconds. Defaults to the current playhead when omitted."}},"required":["clipId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_clip_speed","kind":"act","impl":"imperative","description":"Set a video clip playback speed. Supported rates are 0.25, 0.5, 0.75, 1, 1.25, 1.5, and 2. Timeline duration changes while source in/out stay the same. Still images use set_still_duration instead.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"playbackRate":{"type":"number","enum":[0.25,0.5,0.75,1,1.25,1.5,2],"description":"Video playback speed multiplier."}},"required":["clipId","playbackRate"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_clip_fade","kind":"act","impl":"imperative","description":"Set a visual clip fade-in and fade-out duration in timeline microseconds. Supported values are 0, 250000, 500000, 1000000, and 2000000, limited by the clip's current timeline duration. Works with video and still-image clips.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"},"fadeInUs":{"type":"integer","enum":[0,250000,500000,1000000,2000000],"description":"Fade-in duration in timeline microseconds."},"fadeOutUs":{"type":"integer","enum":[0,250000,500000,1000000,2000000],"description":"Fade-out duration in timeline microseconds."}},"required":["clipId","fadeInUs","fadeOutUs"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_clip","kind":"transact","impl":"imperative","description":"Delete an existing visual clip (video or still image) from its video track.","inputSchema":{"type":"object","properties":{"clipId":{"type":"string"}},"required":["clipId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_audio","kind":"act","impl":"imperative","description":"Set or update one audio clip on an audio track using a loaded audio Asset ID. trackId is optional and defaults to A1.","inputSchema":{"type":"object","properties":{"assetId":{"type":"string","description":"Loaded audio Asset ID from get_project_state"},"trackId":{"type":"string","description":"Target audio track ID. Defaults to A1 when omitted."},"timelineStartUs":{"type":"integer","minimum":0},"sourceInUs":{"type":"integer","minimum":0},"sourceOutUs":{"type":"integer","minimum":1},"volume":{"type":"number","minimum":0,"maximum":1}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_audio","kind":"act","impl":"imperative","description":"Remove the current audio clip from an audio track without deleting the loaded Asset. trackId defaults to A1.","inputSchema":{"type":"object","properties":{"trackId":{"type":"string","description":"Audio track ID. Defaults to A1 when omitted."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_canvas","kind":"act","impl":"imperative","description":"Set DOGAGA's project canvas preset and source fitting mode through the shared editor state.","inputSchema":{"type":"object","properties":{"preset":{"type":"string","enum":["landscape","portrait","square","portraitFourFive"],"description":"Project canvas preset: landscape 16:9, portrait 9:16, square 1:1, or portraitFourFive 4:5"},"fitMode":{"type":"string","enum":["contain","cover"],"description":"contain shows the whole source; cover fills and crops the canvas"}},"required":["preset"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_transition","kind":"act","impl":"imperative","description":"Add a cross-dissolve between two adjacent visual clips on the same video track. Video and still-image clips share the same transition model. Duration defaults to 500000 microseconds.","inputSchema":{"type":"object","properties":{"fromClipId":{"type":"string"},"toClipId":{"type":"string"},"durationUs":{"type":"integer","minimum":1}},"required":["fromClipId","toClipId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_transition","kind":"act","impl":"imperative","description":"Remove an existing transition by transition ID.","inputSchema":{"type":"object","properties":{"transitionId":{"type":"string"}},"required":["transitionId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_edit_plan","kind":"act","impl":"imperative","description":"Submit a validated, non-mutating multi-step editing proposal for the human to review inside DOGAGA. Use this after get_project_state when the Project Brief, a ready humanDemonstration, or the live timeline suggests useful improvements. A human demonstration is an example to generalize, not an instruction to blindly replay IDs: choose analogous current assets or clips and explain the mapping in the reason. add_visual_clip can add a loaded video or image to an existing video track while preserving a demonstrated still duration, playback rate, and fades. The proposal does not change the timeline until the human clicks Apply in DOGAGA.","inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":100,"description":"Short human-readable title for the proposed editing change."},"reason":{"type":"string","minLength":1,"maxLength":500,"description":"Explain why this plan fits the project brief, human demonstration, or current live state."},"operations":{"type":"array","minItems":1,"maxItems":8,"description":"Structured editing operations. The handler validates the fields required for each operation type against the live DOGAGA state. add_visual_clip uses a loaded visual asset ID plus an existing video track and can carry the demonstrated still duration, playback rate, and fades.","items":{"type":"object","properties":{"type":{"type":"string","enum":["add_visual_clip","set_canvas","set_track_opacity","set_track_visibility","set_track_mute","move_clip","move_clip_to_track","trim_clip","set_clip_speed","set_still_duration","set_clip_fade"]},"assetId":{"type":"string"},"preset":{"type":"string","enum":["landscape","portrait","square","portraitFourFive"]},"fitMode":{"type":"string","enum":["contain","cover"]},"trackId":{"type":"string"},"opacity":{"type":"number","minimum":0,"maximum":1},"visible":{"type":"boolean"},"muted":{"type":"boolean"},"clipId":{"type":"string"},"toIndex":{"type":"integer","minimum":0},"sourceInUs":{"type":"integer","minimum":0},"sourceOutUs":{"type":"integer","minimum":1},"playbackRate":{"type":"number","enum":[0.25,0.5,0.75,1,1.25,1.5,2]},"durationUs":{"type":"integer","minimum":100000,"maximum":600000000},"fadeInUs":{"type":"integer","enum":[0,250000,500000,1000000,2000000]},"fadeOutUs":{"type":"integer","enum":[0,250000,500000,1000000,2000000]}},"required":["type"],"additionalProperties":false}}},"required":["title","reason","operations"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","apiSurface":"spec","toolCount":23}}