Repository navigation
feat(video): Generated Videos and the Video Run Interval for Conversation characters and the Roleplay Illustrator - #7993
Conversation
…ustrator Agents and characters could make images on their own, never videos (Pasta-Devs#7408, item 7). Conversation chats get a Generated Videos toggle, and Roleplay chats an "Illustrator makes" setting (Pictures / Pictures and clips / Clips only); both default to today's behavior. - Conversation: new "video" command key (owned by the illustrator package, opt-in: only advertised and executed when conversationCommandToggles.video is true). [video] / [video: context="..."] parses like [selfie] and is stripped from the text. startConversationVideoCommand runs the clip in the background via generateConversationVideo and attaches it to the character's message; it joins pendingRoleplayMedia so the stream stays open after "done". SSE video / video_error / video_started. - Roleplay: illustratorVideoMode. With Pictures and clips, image-prompt agents (Illustrator and custom trigger_image_generation agents) are offered optional generateVideo/videoPrompt fields in an <optional_video> block, guided by the video connection's Video Prompting Instructions; a picture stays still unless motion is the point of the moment. The clip joins the same message as the picture. With Clips only, the agent always writes videoPrompt, the picture stays out of the reply (kept in the Gallery), and a failed clip shows the picture instead. - Every Roleplay clip follows the chat's First frame (sceneVideoFirstFrame, shared with Conversation and shown once Illustrator makes clips): a new Illustrator picture, the named character's avatar or sprite, or no picture. With Clips only and the avatar or no picture, no picture is drawn at all: generateRoleplayClip makes the clip from Illustrator's scene and motion. A clip without a picture describes everyone it names, the persona included (one illustratorCast builder feeds resolveIllustratorCharacterReferences), and the Avatar first frame starts from whoever is named first. - Roleplay Send Avatar References becomes an Images / Videos / both dropdown: with videos included, a Prompt only clip starts from the character's avatar or sprite (illustratorVideoUseAvatarReferences). - chat-video-generation.ts gains animateGalleryImage, roleplayVideoFirstFrame and generateRoleplayClip. - client: a Generated Videos toggle in the Conversation Illustrator card; the Illustrator makes, First frame and Send Avatar References dropdowns in the Roleplay one; use-generate handles video events. - docs: selfies.md, illustrator-agent.md. Regressions: agent-generated-videos drives /api/generate with fake text, image and ComfyUI services: Roleplay off/on (fields offered only when on, picture animated into the same message) and Conversation [video] off/on (clip on the sender's message, tag hidden). roleplay-clip-first-frame (on a shared fixtures/roleplay-video-harness) covers each Clips only first frame (no picture drawn for Prompt only or the avatar, the avatar with video avatar references, the picture as first frame only), Pictures and clips with the avatar first frame, and the persona and character appearance and avatar order in a clip without a picture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generated Videos could only be turned on from the Illustrator card. The new-chat setup and Chat Settings' Commands lists now show Videos next to Selfies, backed by the same conversationCommandToggles.video switch. Videos is shown as on only when it was turned on, matching the server, which runs [video] only when the toggle is true. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A bare [video] gave the prompt writer only the reply it came in. In a
group chat that reply can joke around the request ("the answer is no"),
so asking for "a video of both of you dancing" made a clip of one
character, and the writer never saw the user's words. A bare [video] now
reads the recent conversation like /video does (Illustrator's context
size): the user's request and the reply. [video: context="..."] keeps its
own context.
Regression: agent-generated-videos checks a bare [video] gives the writer
the recent conversation with the user's request and the reply. Fails
without the fix.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
resolveClipCast kept only the characters' ids, so a clip the Illustrator or a [video] command made of the persona never reached the persona's gallery. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Roleplay First frame left unset never draws a picture just for a clip: Pictures and clips animates the picture Illustrator just made, while Clips only, /video and the Gallery's Video button write the clip from the scene alone. Choosing a picture first frame still draws one. The Roleplay dropdown shows Prompt only for an unset chat (ROLEPLAY_DEFAULT_VIDEO_FIRST_FRAME). - A saved clip counts as made in the automatic paths too (Illustrator clips, Clips only, a character's [video]): failing to attach it only logs and reports the clip with no message, with no video_error and no stand-in picture. The client says it is in the Gallery's Videos tab. - A Pictures and clips clip that starts from the avatar or no picture is tagged with the persona when the picture showed them. - Clips only: pictures already saved are shown if a later step fails. - The regression harness cleans up its temp folder, server and database when setup fails. - Docs: unset First frame behaviour, Generated Videos "starts off in a new chat" with the profile note, and a stray NovelAI separator edit reverted. Regression: agent-generated-videos covers Clips only with no First frame (no picture drawn), a clip saved but not attached (no error, no stand-in picture), and the persona tag on the Pictures and clips path. Each fails without its fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Clips only: when the clip fails, a picture that can't be added no longer stops the remaining pictures from showing. - The roleplay-video harness runs every teardown step even if one fails, then reports the first failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
attachVideoToMessage now says whether the clip landed (Pasta-Devs#7651). Illustrator clips and a character's [video] use it, so a reply deleted while its clip was made reports the clip with no message instead of a message it isn't on. Regression: agent-generated-videos deletes the reply while the clip is made and expects messageId null with no video_error. Fails without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With Pictures and clips, a writer that set generateVideo without a videoPrompt got a paid clip directed only by a generic "Subtle, natural motion..." line, unrelated to the moment. That optional clip is now skipped and the picture stays. A required clip (Clips only) with no motion written now moves from the picture's own scene, and the generic line is gone. Regression: agent-generated-videos makes no clip for generateVideo without a videoPrompt, and a Clips only clip with no motion uses the scene prompt. Each fails without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… their own Moved down from Roleplay /video (Pasta-Devs#7545 item 8) so automatic Roleplay clips can use it too: an editable director prompt that describes the scene itself for text to video, picked by withoutPicture. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing Instructions A video connection's Video Prompting Instructions now decide the format of every chat clip: - The writers are told the instructions govern the final prompt: their format, fields, line breaks and shot rules replace the writer's own (Conversation writer, both Roleplay directors). Illustrator is told to write videoPrompt exactly as they say. - Roleplay directions keep their line breaks, accept a plain answer as well as JSON, and repair JSON with a slip before falling back to raw text. - Every Roleplay clip without a prompt already written to the instructions goes through a writer (new services/video/roleplay-clip-writer.ts): a clip with no picture through the Clip Director, a required clip from a picture through the Gallery animation director. Nothing reaches the video model as Illustrator's image prompt any more. Game Mode is unchanged (its own PR later). Animated expressions and Conversation Calls clips are left as they are. Regression: roleplay-clip-first-frame sends a three-field, multi-line answer and expects it at the video model intact (fails without the line break fix); the Clip Director gets Illustrator's scene and motion; agent-generated-videos checks the Gallery director writes a required clip from the picture with the instructions, and the governing wording reaches Illustrator and the Conversation writer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ructions The Roleplay directors' editable system prompts ask for JSON and one continuous shot, and the Conversation writer's for one continuous moment. Telling the model only in the request that the instructions win left two competing orders, and a model could follow half of each (a [Shot 1] opener in one JSON paragraph, with no fields or line breaks). With instructions, the system prompt now ends by saying they decide the output: plain text in their exact format, fields and line breaks. Saved prompts are not edited; without instructions nothing changes. Regression: agent-generated-videos checks the line in the Gallery director's and the Conversation writer's system prompts; roleplay-clip-first-frame checks it is absent without instructions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tructions ask for it With Attach Card Appearance on for videos, a connection whose Video Prompting Instructions mention appearance now gets everyone's appearance details (characters and persona) sent to the prompt writer, which builds them into the prompt in its format; nothing is pasted after it. Instructions that don't mention appearance keep the old behaviour: the lines are pasted after the prompt. Covers the Conversation writer, the Roleplay clip writer and Illustrator's videoPrompt. A character's own [video] now passes the persona to the writer. Still to do: Gallery /video and Animate (PR 8) and the storyteller's [video] (PR 9) still paste unconditionally. Regression: agent-generated-videos switches the connection's instructions through PATCH /api/connections: with appearance the writer gets Mira's and the persona's details and nothing is pasted; without, the lines are pasted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ferences includes videos Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… user Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ails Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Clips only makes pictures when no working video connection resolves, as the Illustrator agent was told, instead of a video error (and no picture) on every turn. - With Video Prompting Instructions, a Roleplay clip director's JSON answer in the shape they ask for is the prompt itself, not an empty direction. - Use agent default on Send Avatar References resets the video half too, and shows while only the video half is on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t frame Re-running Illustrator on a reply (its Illustrate button) always drew a picture, even with Clips only and First frame on no picture, and never made a clip with Pictures and clips. - The re-run's Illustrate planner (and a re-run agent) is offered clips exactly as a fresh Illustrator run is, and its plan can carry generateVideo and videoPrompt. - Clips only with the avatar or no picture makes the clip without drawing a picture; with a picture first frame the picture is held back and shown only if the clip fails. Pictures and clips adds the clip the planner asked for. Every clip follows First frame. - Who a clip shows and its video prompt now come from one shared module (roleplay-illustrator-clips.ts) used by fresh replies and re-runs, and the <optional_video> offer text is shared by the agent and planner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A re-run built its picture references' cast inline and its clips' cast in retryIllustratorClipCast, and the clip copy dropped the persona's character-sheet reference settings. Both now use the helper, which carries those settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hats Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The Avatar first frame never borrows another person's face: when the first person a clip names has no picture, the clip gets no avatar (Avatar fails clearly; avatar-or-none makes a prompt-only clip). - The Videos entry in the Conversation Commands lists (Chat Settings and the new-chat setup) uses catalog keys for its label and description. - gallery.routes uses roleplay-clip-writer's buildRoleplayVideoSettingLine instead of its own copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bility guard 6d565c4 replaced gallery.routes' buildRoleplayVideoSettingLine with the copy in roleplay-clip-writer. That copy reads the metadata off a parameter, which the capability-gm-verbs sweep cannot see, so the Engine's `scenario` key dropped out of the keys a package may not claim and the regression failed. The gallery's copy is back, with a comment saying why it stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Generated Videos had no throttle (Pasta-Devs#7408 follow-up, requested alongside item 7). The Illustrator's existing interval stays the image interval and is now labelled Image Run Interval; a separate Video Run Interval paces clips that agents and characters make on their own. - shared: illustratorVideoRunInterval (per chat, preset-able, 0-100, normalized on metadata PATCH) and lastAutomaticVideoMessageId (anchor). - server (agent-cadence.ts): resolveVideoRunInterval (chat, else the Illustrator agent's settings.videoRunInterval, else 5), automaticVideoAllowed (0 = never; counts user/assistant messages since the anchor; no usable anchor = allowed) and loadVideoRunInterval. - Gates: the [video] command is only advertised when allowed, and the dispatcher re-checks and allows at most one clip per reply; Illustrator is only offered generateVideo/videoPrompt when allowed, and the handler re-checks against fresh metadata before animating. Each successful automatic clip sets the anchor. /video and the Gallery ignore the interval. - A new swipe of the anchored message replaces the reply its clip belonged to, so it passes the interval (automaticVideoAllowed targetMessageId: the regenerated message for the offer and [video] dispatch, the illustrated message for the Illustrator); the earlier swipe keeps its clip. - client: Video Run Interval field in the Roleplay and Conversation Illustrator settings (shown with Generated Videos) and in the Agent Editor; new imageRunInterval / videoRunInterval keys (the old runInterval key is untouched, so translations of it stay valid where it is still used). - docs: illustrator-agent.md, selfies.md, built-in-agents.md. Regression: scripts/regressions/illustrator-video-run-interval.regression.ts covers the rules, then drives /api/generate: a Conversation [video] is allowed, held back (and not offered) inside the interval, allowed again after it, never at 0; a Roleplay Illustrator clip is not offered or made inside the interval. Swiping a reply that sent a clip gets a clip on the new swipe in both modes, while the next separate message is still held back. With Illustrator making clips only, every run is a clip, so the Video Run Interval paces Illustrator itself (applyIllustratorChatRunInterval) and the Image Run Interval is hidden in that mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A group turn is one reply, so only the first character's [video] was made and the rest were dropped without a word. Each character in a reply may now send one clip, up to three per reply; skipped clips are logged with the reason. A [video: ...] description over 2,000 characters was not read as a command and stayed in the message as raw text. Any length is read now; past the limit the Prompt Model shortens it once before the writers see it, and if that fails it is cut at the limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…deo Generation The cap on video messages Conversation characters send on their own in one reply (one per character) is now a setting, 1 to 10, default 3. It exists for group chats, where several characters answer in one reply, and for when the user asks for more than one video at once; lowering it saves video requests. /video and the Gallery's Video button don't count toward it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The checks that offer a clip ([video] to characters, generateVideo to Illustrator) count the interval over the whole chat, as the check before making the clip does. A short context window no longer hides the last clip, so a clip is not offered and then refused. - The interval counts from a clip's reply as the clip starts, not when it finishes minutes later, so a later reply cannot start another one meanwhile. A failed clip gives the previous starting point back, unless a newer clip has taken its place. - The new-chat Add Agent form shows the interval label in the user's language. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A Roleplay clip checks the interval and records its reply in one serialized step, so two replies that finish close together can't both start a clip. - Clips that share one message (a merged group reply) give the interval back only when the last of them settles and none was made, so one failure can't erase the starting point of a clip that was. - The run-interval regression cleans up when its setup fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claimAutomaticVideoRun writes lastAutomaticVideoMessageId through an updater function the capability sweep can't read; the key is under the reserved `last` namespace, so the pinned count goes from 21 to 22. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@SpicyMarinara Dottore's run here didn't finish on the reviewer's side (the model timed out after 600 s), so the PR hasn't been reviewed yet. Could you comment |
|
/dottore |
| onReset={resetIllustratorCharacterAppearance} | ||
| /> | ||
| <AgentSettingsToggle | ||
| <MediaScopeSelect |
There was a problem hiding this comment.
⚠️ MEDIUM: Send Avatar References keeps a second control that cannot see the video half
Location: packages/client/src/components/chat/ChatSettingsDrawer.tsx:9276
One setting now wears two faces in the same drawer: the four-way dropdown that writes
illustratorUseAvatarReferencesandillustratorVideoUseAvatarReferencestogether, and the legacy toggle a few thousand lines below whose mutation carries only the image key. Switch that toggle off and the video flag stays exactly where the dropdown left it, so a Prompt only clip keeps starting from the avatar —roleplayVideoFirstFramereadschatMeta.illustratorVideoUseAvatarReferences === trueand returnsavatar_or_none— while the control that claims to govern references reads off. The reset has already been taught to clear both halves, which makes the asymmetry worse: a control displaying one half silently discards the other, and a chat set to Videos only through the dropdown shows the ca
[truncated: inline finding was 1433 chars, limit is 1085 chars]
🎭 Push a repair and Dottore re-examines this thread; or tick the 🩺 box in his walkthrough to let him repair it.
There was a problem hiding this comment.
Not changed. The two controls never appear in the same chat. The four-way Send Avatar References dropdown that writes both keys is in the Roleplay Illustrator Settings (rendered only when isRoleplayMode && illustratorActive). The on/off toggle in this agent card is in the Game Mode branch (isGame ? … gameAgentPool). Game Mode's scene videos never read illustratorVideoUseAvatarReferences; only the Roleplay clip paths (roleplayVideoFirstFrame and the Illustrator clip cast) do. So a Game chat's image-only toggle can't leave a video flag active anywhere, and a Roleplay chat never shows that toggle.
| ); | ||
| } | ||
|
|
||
| if (videoCommandEnabled && chatMode === "conversation") { |
There was a problem hiding this comment.
ℹ️ LOW: [video] is advertised to characters with no video connection behind it
Location: packages/server/src/services/generation/conversation-command-runtime.ts:276
Directly above, the selfie offer waits on
hasImageGen— a connection the chat actually picked — before it promises a photo. The new video offer waits on nothing of the kind:videoCommandEnabledisisConversationCommandAvailable, a room allowance, the toggle, and the Video Run Interval, none of which knows whether a video-generation connection exists. A chat with Generated Videos turned on and no usable connection therefore instructs the character to send clips, and each one runsgenerateConversationVideointoresolveChatVideoSetup, which throwsChatVideoError(400, "Choose a video connection in Chat Settings before making a video.")and returns to the reply asvideo_error. The illustration side already knows better:resolveIllustratorVideoOfferreturns null without a work
[truncated: inline finding was 1320 chars, limit is 1085 chars]
🎭 Push a repair and Dottore re-examines this thread; or tick the 🩺 box in his walkthrough to let him repair it.
|
🎭 Dottore cannot discharge this specimen yet: its examination of this head did not end Viable; 7 Dottore thread(s) are unresolved; these checks have not passed: |
…ideo-run-interval # Conflicts: # packages/server/src/routes/generate.routes.ts # packages/server/src/routes/generate/retry-agents-route.ts
…'s cast Both picture branches (a fresh reply and an Illustrate re-run) passed no characters to animateGalleryImage, so the clip went to every character's gallery in the chat while the picture it grew from was filed under the people it shows. They now pass the same cast (and persona) as the clip branch beside them. (Dottore review on Pasta-Devs#7993.) Regression: roleplay-clip-first-frame animates a picture of Aster in a chat with Aster and Bram and expects the clip filed under Aster only. Fails without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es, not Generated Videos Generated Videos is the Conversation switch; a Roleplay chat turns on Illustrator's clips with Illustrator makes. (Dottore review on Pasta-Devs#7993.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iled clip gives back its slot - Conversation characters were told about [video] in a chat with no working video connection, so every clip they sent failed. The offer now also needs one, found the way clip-making finds it (hasChatVideoConnection), as [selfie] needs an image connection. - A Conversation clip that fails gives back its Videos per reply slot and its character's one clip, as Roleplay clips already do (startConversationVideoCommand now resolves to whether the clip was made). (Dottore review on Pasta-Devs#7993.) Regression: agent-generated-videos, a chat whose video connection isn't a video connection is not offered [video]; one with a real one is. Fails without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…arsed The clip path parsed the chat's metadata again with a bare JSON.parse, so an empty or malformed value ended the whole re-run. It now uses the chatMeta parsed safely at the top of the handler. (Dottore review on Pasta-Devs#7993.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ompt Any video prompting instructions made a stray object (an error payload) the prompt, braces and all. It now counts only when the instructions name JSON or show an object. (Dottore review on Pasta-Devs#7993.) Regression: prompt, plain instructions and {"error":"rate limited"} give no prompt. Fails without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ChatSettingsDrawer and ChatSetupWizard each had the same opt-in rule for Videos; both now use isConversationCommandToggleOn from shared. (Dottore note on Pasta-Devs#7993.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hasChatVideoConnection read the connection with getById, which also returns one still waiting on its import review; clip-making reads it with getWithKey, which doesn't. It now uses getWithKey too. The Illustrator key settings are shorter sentences. (Local CodeRabbit on Pasta-Devs#7993.) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es, staging) into feat/roleplay-videos Roleplay /video reads the chat's own card fields (characters.getById / getPersona with the chat) for its clip cast, avatar and persona, as staging's per-chat card fields need. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the re-run, @SpicyMarinara. Dottore's review is addressed in
On |
SpicyMarinara
left a comment
There was a problem hiding this comment.
Reviewed df781a9d4e0727b6d4457139357471051d4448b7.
Changes requested: make malformed video-tag parsing linear before merging.
At packages/server/src/services/conversation/character-commands.ts:470–486, every unclosed [video: scans to the end of the response, but failure advances only to that line's end. The next malformed line scans almost the same suffix again. parseCharacterCommands performs this scan for both extraction and stripping, before the later command/video-connection checks.
I independently reproduced this through the actual exported parser with '[video:\n'.repeat(n): 16 KB took 83 ms, 32 KB 310 ms, 64 KB 1.30 s and 128 KB 7.34 s on this machine. The pre-feature parser took 3.37 ms for the same 128 KB input; a larger balanced-tag control took 21 ms. Timing varies by host, but the repeated suffix scan directly establishes quadratic server event-loop work on model-controlled text.
Please preserve balanced multiline descriptions and the existing malformed-line fallback while ensuring previously examined suffixes are not rescanned. Add a scaling regression with malformed multiline tags and balanced/multiline controls.
The feature is coherent host integration and should remain open for repair. I also verified that the old second-avatar-reference-control finding is a mode-separation false positive (Game-only versus Roleplay-only), rather than treating all historical findings as current defects.
Pair every bracket once up front instead of scanning to the end of the reply for each unclosed tag, which made many malformed lines quadratic. Balanced multiline descriptions and the hide-to-end-of-line fallback are unchanged; the regression adds a scaling check and nested/multiline controls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fixed in caa9ff1.
The old parser didn't finish the new scaling check within 280 s; the fixed one passes the whole regression in about 20 s. |
|
Thank you! |
Important
Contributions target
staging. OnlySpicyMarinaramay promote this repository'sstagingbranch or a same-repositoryhotfix/*branch tomain.Outside and first-time contributors also require an approving review from
SpicyMarinara.Note
#7860 and #7863 together, as asked. Both were closed for the 2.5.1 release with a request to bring them back after it, with the review fixes. This is the #7863 branch (which already contained #7860) merged with the current
staging(4d2932c05), plus the fixes listed under Review fixes below.Linked issue
Closes #7992
Part of #7545 (item 6 of 8). Replaces #7860 (#7859) and #7863 (#7862). @SpicyMarinara
Why this change
[video]was made and the rest were dropped silently.What changed
Nothing that worked before stops working: Generated Videos starts off, Illustrator makes starts on Pictures, and the interval Illustrator already had is now labeled Image Run Interval and behaves as before.
Conversation
[video]command when it fits. The same switch appears as Videos in the Commands list of the new-chat setup and Chat Settings.[video]is written from the recent conversation, as/videois, so a clip you asked for shows what you asked for.[video: …]description of any length is read, brackets of its own included ([Shot 1] …); one over 2,000 characters is shortened by the Prompt Model, or cut at 2,000 if that fails. A tag that never closes makes no clip and is hidden to the end of its line.Roleplay (Chat Settings, Agents, Illustrator)
Limits (only for clips the AI makes on its own, never ones you ask for)
/video, the Gallery's Video and Animate, or a message's Illustrate button.[illustrate]clips (Clips only, or Pictures and clips) go through the same interval check and count toward Videos per reply; one held back shows its picture instead.Every clip
video_started/video_skipped), as a pending picture does.Code: the clip pieces shared by a fresh reply and a re-run (who a clip shows, its prompt, the clip offer to Illustrator) live in
services/video/roleplay-illustrator-clips.ts; the<optional_video>offer text is shared by the Illustrator agent and the Illustrate planner; the interval claim isclaimAutomaticVideoRuninservices/generation/agent-cadence.ts.Docs:
docs/agents/built-in-agents.md,docs/conversation/selfies.md,docs/media/illustrator-agent.mdanddocs/media/scene-video.md.Review fixes (from #7860 and #7863)
bc855b069): the first name is resolved on its own with reference images, so "Lena" finds "Dr. Lena Kowalski";roleplay-clip-first-framecovers a multi-word card name.bc855b069): the agent signal goes tocreateRoleplayClipTools,animateGalleryImage,generateRoleplayClip(newsignal) andstartConversationVideoCommand/generateConversationVideo; the re-run passes its ownsignal. It is checked up to the provider request and passed to it.[illustrate]clips skipping the interval (bc855b069,97a714760): both paths go throughclaimRoleplayClip(the interval claim with the sameallowedcheck as automatic clips, plus the Videos per reply cap); a refused one draws its picture.roleplay-clip-first-frameis updated.bc855b069): the Image Run Interval input has its ownaria-label, ande2e/illustrator-manual-cadence.e2e.tsusesgetByRole("spinbutton", { name: "Image Run Interval" }). Not run locally (see Validation).agent-cadence.tscatch: returns null whenallowedwas passed, so a refused clip can't slip through on a write error.illustrator-agent.mdnames the Illustrator card's Open Setup screen.Dottore review fixes (2026-10-22)
[video]is offered only when the chat has a usable video connection (hasChatVideoConnection), as[selfie]needs an image connection.built-in-agents.mdnames Illustrator makes for Roleplay clips; one sharedisConversationCommandToggleOnholds the Videos opt-in rule.Validation
pnpm checkpasses locallyCONTRIBUTING.mdAutomated runs on 2026-10-21, Node 24.21.0:
cb908755a(staging4d2932c05merged in, no conflicts):pnpm check: passes. Its one lint warning, inHomeProfessorMariChat.tsx, is not from this PR.pnpm localization:check: passes.pnpm regression: 960/960 pass.d6be94a30(local CodeRabbit fixes):pnpm checkpasses;agent-generated-videos,illustrator-video-run-interval,roleplay-clip-first-frame,convo-video-command,capability-gm-verbsandpromptpass.agent-generated-videos: Conversation[video]on and off, the bare[video], bracketed and unclosed tags, Pictures and clips and Clips only, a failed clip showing its picture, a saved-but-unattached clip counting as made, persona tagging, a character played as the user, appearance built in when the instructions ask for it, Videos per reply and long descriptions.roleplay-clip-first-frame: the First frame choices, a short name finding its card's avatar, Send Avatar References for videos, the Clip Director and instruction-shaped answers, no working video connection, re-running Illustrator, and[illustrate]clips inside and after the interval.illustrator-video-run-interval: both intervals, a short context window, agent default and chat override, 0, swipes, and the interval claim (racing replies, clips sharing one message, a failed write).staging4d2932c05: 11 findings.d6be94a30: a stopped Roleplay clip reported as a 502 "failed to plan" and avideo_error(two findings); a re-run whose clip failed ending with "Agent retry completed"; debug mode not logging the text sent to be shortened; the Video Run Interval paragraph inillustrator-agent.mdsplit into a list.globals.csstouch-screen rule16px(three findings). That rule already sets inputs and selects to1remunder@media (pointer: coarse); it falls short only with a smaller app font size, which affects every input in the app, not this PR. Declined:tryParseJsonRecordthrowing inresolveRoleplayVideoDirection, becauserepairJsonTextonly returns textJSON.parsealready accepted. Declined: splitting two docs paragraphs that are already short sentences.d6be94a30: 0 findings.e2e/illustrator-manual-cadence.e2e.tsand the rest ofpnpm regression:ui/pnpm smoke:ui. Playwright's Chromium download fromcdn.playwright.devtimes out on this machine, so the spec the review asked to run is left to CI or a manual run.Manual verification notes
pnpm exec playwright test e2e/illustrator-manual-cadence.e2e.tsand confirm it passes./videostill works./videoand the Gallery's Video button still work.[illustrate]gives its picture, not a clip, while a message's Illustrate button still makes a clip.Docs and release impact
docs-i18nbranch updated to match, or a[docs-i18n]follow-up issue opened (see CONTRIBUTING.md § Translated documentation)English docs updated:
docs/agents/built-in-agents.md,docs/conversation/selfies.md,docs/media/illustrator-agent.md,docs/media/scene-video.md. Translations: #7994. The Marinara-Agents README follow-up: Pasta-Devs/Marinara-Agents#1492.UI evidence (if applicable)
From #7860 and #7863 (taken 2026-10-19; the settings are unchanged since).
Roleplay mode illustrator agent additions
"Pictures and Clips" illustrator setting demo
(Note: I did not have an I2V workflow activated here in ComfyUI, thus the visual difference between the image and video.)
"Clips Only" illustrator settings demo
Videos command toggle
Convo mode: requesting a clip with Videos toggle enabled
Convo mode: requesting a clip with Videos toggle disabled (reverts to image)
Videos per reply setting in Settings
Video Run Interval and renamed Image Run Interval
Videos per reply setting at default (3)
Videos per reply setting set to 2
🤖 Generated with Claude Code