v1.0.43
Added
参考文件 page: grab a frame from a Footage Library video and add it to a section (2026-10-26).
The 视觉风格, 封面, 角色, 场景, 生物, 道具 and 其他 sections get a 🎞 素材库 button between ✨ 生成 and 🔎 图库. It opens a window listing the projects of the Footage Library (
/footage), with the first clip's thumbnail, duration and resolution, and a search box over title, source and tags; projects without a source video are greyed out. Pick one and its original video (source/source.<ext>, not the 480p analysis proxy) plays on the right: play, drag the timeline, step with ◀ 上一帧 / 下一帧 ▶ (or the,and.keys), or click a clip thumbnail in the strip below to jump to its start. The time line shows the current frame number. 📸 截图加入参考文件 saves the frame on screen intorefs/<section>/footage_<project>_f<frame>.jpg. The frame is cut on the service with ffmpeg from the original file, aligned to the frame the page is showing, at the original resolution (long side over 2560 px scaled down to 2560, as for gallery imports). If the browser cannot play the original format (for example ProRes), the window plays the proxy instead and says so; screenshots still come from the original. The same frame is not saved twice into the same section. The footage project, title, time, frame number and source link are saved underfootageinrefs/annotations.json; the card shows a 🎞 素材库 · <title> · <time> line, and when you write a note itsNOTES.mdline ends with the footage title and time. The window remembers the last project you picked. New endpoint:POST /api/v1/projects/<project>/references/footage-frame({footage, t, category}); the footage project list (GET /api/v1/footage/projects) now also returnshas_source,thumband the source width / height. All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers).参考文件 page: generate an image with AI and add it to a section (2026-10-26).
The top bar gets the same 🎨 图像模型 picker as the character preview page (channel + model, empty = follow the global image setting; saved as its own
refschoice, separate from the other preview pages). The 视觉风格, 封面, 角色, 场景, 生物, 道具 and 其他 sections get a ✨ 生成 button left of 🔎 图库. It opens a 生成图片 window with a prompt box, a 画幅 choice (16:9, 9:16, 1:1, 4:3, 3:4; remembered in the browser) and a 🎨 风格库 button that opens the same style library as the console and 🖌 画板: clicking a style adds its prompt to the prompt box, picking another style replaces it, and the ✕ on the style tag removes it. 生成 runs one image with the model picked in the top bar and shows the channel, model and elapsed seconds while it runs; the result appears in the window (click to enlarge) with 加入「<section>」 and 重新生成. Nothing goes intorefs/until you press 加入: the image waits inassets/refs_gen/(cleared after a day, and 重新生成 drops the previous one), then is copied torefs/<section>/gen_<job>.<ext>with the extension taken from the file header (channels often return JPEG). Its prompt, channel, model, aspect and style are saved undergeninrefs/annotations.json, and its card shows a ✨ AI 生成 line with the prompt on hover; when you write a note for it, itsNOTES.mdline ends with the channel and model. Closing the window does not stop the generation; reopening it shows the result. New endpoints:POST /api/v1/projects/<project>/references/generate,GET …/references/generate/<job>,POST …/references/generate/<job>/adopt. Jobs are kept in memory, so after a service restart the window asks you to generate again. The Russian dictionary's translation of 生成 was "." and is now «Сгенерировать». All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers). Not exercised: a real image channel (tests and the browser check used a stand-in for the generation step).Fal: Kling 4.0 (
kling/v4) is now a built-in video model (2026-10-26).Pick Kling 4.0 in the Fal tab of 🎨 生成模型 → 视频 (also listed for episode / group model overrides and the live-stream page). genmedia picks the text-to-video, image-to-video (first/last frame) or reference-to-video endpoint from the inputs, sends the duration as an integer of 3–30 s and the resolution as 720p/1080p (360p/480p go up to 720p, 2K/4K down to 1080p), and accepts up to 10 reference images and 5 reference videos (3–30 s each, 30 s in total). The endpoint takes no reference audio,
--seedor--generate-audio. Reference tags in the prompt ([Image N],@Image N,[Video N]) are rewritten to Kling's@Image1/@Video1. Kling 4.0 needs both sides of a reference video to be at least 700 px, so whitebox camera videos (960×540) are scaled up to 1280×720 before upload (cached underdata/.videoagents/kling4_ref_videos/). Tail-video continuation stays off for this model: tail clips are at most 3 s, Kling's per-video minimum, so long takes continue from the last frame instead. Before this, any Fal model id containingklingwas sent in the Kling 3.0 format, so a hand-enteredkling/v4got a string duration capped at 15 s, lost its resolution and refused reference assets.Kling 4.0: a prompt skill (
kling4-pe) and a 模型限制 preset (2026-10-26).When the active video model is Kling 4.0 on Fal (
kling/v4), the Prompt Engineer now loads the newkling4-peskill automatically, as it doeswan3-pefor Wan 3.0. The skill is written from Kling's official Kling 4.0 User Guide (kling.ai, 2026-10-14) and Fal'skling/v4parameter tables; it is not a skill file published by Kling. It follows the guide's prompt order (asset roles, overall settings, a time-stamped sequence of events, audio): every reference image or video gets a stated role and what to preserve, abstract words are replaced with concrete light, material and colour, negatives are kept to the team's required ones plus no subtitles and no background music, each line of dialogue names the speaker, language and voice, and speakers never overlap. Because Kling 4.0 on Fal takes no reference audio, its groups leaveaudio_refsempty and keep a character's voice consistent through the same written voice description. Shot durations are written as consecutive whole-second segments (0-3s:), as for Seedance 2.5 and Wan 3.0. When genmedia submits to Kling 4.0 it now also turns the team's{line}dialogue marks into quotation marks, the form Kling's guide asks for. The 🎬 模型限制 dialog and the new-project wizard get a Kling 4.0 preset (group ≤30 s, 10 reference images, 5 reference videos, 0 reference audios), and the wizard picks it when the active video model is Fal Kling 4.0. RunningHub'skling-v4/*endpoints are not matched to the skill or the preset, since their limits differ (one reference video onkling-v4/omni-video). The skill-selector help text in all 11 UI dictionaries mentions the new skill (non-English ones not reviewed by native speakers).参考文件 page: a 🔎 图库 button on each image section searches free image libraries and adds picked images to that section (2026-10-23).
The 视觉风格, 封面, 角色, 场景, 生物, 道具 and 其他 sections each get a 🔎 图库 button next to 上传. It opens a search window whose target section is the one you clicked. Click a section icon under a result to download it into that section; tick several results and press 加入参考文件 to add them together to the target section, with an optional note. A magnifier shows a larger image with the author, source page, license and size. Search and downloads go through the service (
GET /api/v1/stock/providers,POST /api/v1/stock/search,POST /api/v1/projects/<project>/references/import); the service takes the download address from its own search results, never from the page. Images whose long side is over 2560 px are scaled down to 2560 (transparent images stay PNG); smaller ones are saved as downloaded. Adding the same image to the same section again does not download it twice. Sources: Openverse needs no key (Flickr, Wikimedia Commons, Europeana, The Met, Smithsonian, Cleveland and other collections; anonymous limit 20 searches a minute and 200 a day, and at most 240 results per search). Only CC0, public-domain and CC BY images are offered; BY-SA, NC and ND are left out, as for Openverse sound effects. If Client ID / Secret are saved under 音效 › Openverse on the 生成模型 page, image search uses them too. Pexels and Pixabay are listed but stay disabled until a free API key is set: on the ⚙️ 设置 → 存储与图库 page (a 🖼 图库 API Key card with a 测试 button that runs one real search with the key in the form), or, when that is blank, inPEXELS_API_KEY/PIXABAY_API_KEYor the footage library'sfootageconfig.json(pexels_api_key/pixabay_api_key). The footage library's Pexels / Pixabay video search reads the same keys from that page first. Search results are cached for 24 hours (Pixabay's terms require this), so repeating a search does not use quota. Openverse titles are mostly in English, so a 译成英文 button (enabled when the query contains Chinese, Japanese or Korean) translates the query into 1–3 English keywords with the Agentics engine's current text model and searches again; each click is one model call on that channel. Records: each imported image's source (site, author, license, page, attribution, search terms) is saved inrefs/annotations.jsonand shown on its card; when the image has a note, itsNOTES.mdline ends with the source and license. A newrefs/CREDITS.md, rewritten on every import or delete, lists all imported images and marks the CC BY ones that need a credit if they appear in the film. Clearing an imported image's note keeps its source record. All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers). Not exercised: Pexels and Pixabay against the real services (no keys), and 译成英文 through the Agentics desktop account.
Removed
参考文件 page: the 子目录 (subfolder) box is gone (2026-10-26).
The 角色, 生物 and 道具 sections, and the footer of the 🔎 图库 window, no longer have a 子目录 field, so uploads and gallery imports always go straight into
refs/<section>/. To say which character, creature, prop or costume a file is for, write it in the file's note (✏️ 注释); the three section descriptions now say so.POST /api/v1/projects/<project>/referencesand/references/importno longer takesubdir(an old value is ignored). Files already in subfolders are still listed, can still be deleted, and an image already imported into a subfolder is not downloaded again into the same section. The workflow spec (agents/WORKFLOW.md§2) and the character, creature, costume and costume-sheet agents now matchrefs/characters/,refs/creatures/andrefs/props/by the note inrefs/NOTES.md; existing subfolders are still matched by folder name. The new projectrefs/README.mdno longer mentions subfolders. All 11 UI dictionaries are updated (non-English ones not reviewed by native speakers).
Changed
Language Model/Agentics: the 云端模型 (Cloud model) tab is shown again, and it no longer comes with DeepSeek defaults (2026-10-26).
On 🎨 生成模型 → 语言模型/Agentics, the 云端模型 tab hidden on 2026-10-22 is back, and 云端模型 is listed again in that card's 生效渠道 dropdown. Base URL, API Key and model now start empty and must be filled in for whichever OpenAI-compatible provider you use: the page no longer fills in
https://api.deepseek.comanddeepseek-v4-flash, the service no longer falls back to that address when none is saved, and the built-in DeepSeek model list is gone (the console top bar used it when the endpoint's model list could not be read; it now shows only the saved model). 测试连接 still lists the endpoint's models to pick from. Settings saved before this change that still hold the old DeepSeek address or model with no API Key (the channel could not run without one) are cleared on load; settings with an API Key are kept as they are. If the cloud channel is active without a Base URL, the Agentics engine now refuses to start and says to fill it in. Also fixed: clicking 测试连接 on the local or cloud tab before any model had been chosen saved the literal value__customas the model; it now selects the endpoint's first model, and a model typed under 自定义… is kept. OpenRouter stays hidden, and the console top bar still lists 云端模型 only while it is the active channel. All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers).Moderation model: the default is now
typesafe/jev-1.14instead oftypesafe/jev-1.13(2026-10-26).On the 🛡 审核模型 card of the 🎨 生成模型 page, both the Agentics and OpenRouter tabs now preselect Jev 1.14 on a new install or when no model has been saved, and a saved model that is no longer on the list (such as the first version's
typesafe/jev-router) falls back to 1.14. Jev 1.13 can still be chosen, and a configuration that already savedtypesafe/jev-1.13keeps it.⚙️ 设置 → 文件托管 is renamed 存储与图库 (2026-10-23).
The page now holds two things: the object storage that turns local reference files into presigned links for video models (unchanged), and the image-library API keys for 🔎 图库 on the 参考文件 page. The menu entry, page title, the hints on the 虚拟人像资产库 page (its readiness line is now 对象存储自检), server error messages and the agent notes that point users to this page use the new name; the address is still
/storage, and saved settings are unchanged.Agents can no longer delete the data folder or a whole project, and each project is snapshotted before an Agent starts (2026-10-23).
In a reported case a pi Agent typed the data folder path with different letter case (
@videoAgentsinstead of@videoagents); macOS treats both as the same folder, but the tool echoed the wrong spelling, so the Agent believed it had made a duplicate folder and ranrm -rfon it, deleting every project, the bundled Python runtime and the sign-in data. Delete guard: the data folder, the runtime folder,projects/, every project folder, the install folder, the bundled Python, the snapshot folder and the home folder, plus every folder above them, are protected. Deleting one of them, or emptying it with something likerm -rf <project>/*, is refused and nothing is deleted; files and subfolders inside a project can still be deleted. Folders are compared as the same folder on disk, not by spelling, so different letter case, symlinks,..or a trailing slash make no difference. For the pi and Agentics engines an extension checks each tool call first: a literal delete of a protected folder (including/bin/rm,find … -deletewith no name or time filter, andshutil.rmtree('…')) is blocked and the reason goes back to the Agent as the tool result, which2>/dev/null || truecannot hide, and says the two spellings are the same folder when only the case differs; file paths given to read / write / edit / ls / find / grep are corrected to the spelling on disk, so the Agent never sees a wrong one. For every engine anrmplaced first on the Agent'sPATHchecks the arguments after the shell has expanded them, so variables and wildcards are covered; it only starts Python when an argument is a folder. Engines that run commands in a login or interactive shell may put the systemrmback in front, so for engines other than pi and Agentics this is best effort, and there is normstand-in on Windows yet. Snapshots: before an Agent starts, its project is copied outside the data folder, to~/Library/Application Support/VideoAgents-Snapshotson macOS (%LOCALAPPDATA%\VideoAgents-Snapshotson Windows,~/.local/share/videoagents-snapshotselsewhere, orVIDEOAGENTS_SNAPSHOT_DIR). On macOS this is an APFS clone that takes no extra space at first (a 15 GB project with 20,000 files took 0.65 s); elsewhere it is a tree of hard links, which survives deletion but not files rewritten in place; if the snapshot folder is on another drive the snapshot is skipped rather than copied in full. A project is snapshotted at most every 30 minutes; within 7 days the 3 newest are kept plus the newest of each day, and older ones are removed (VIDEOAGENTS_SNAPSHOT_INTERVAL/_KEEP/_DAYS;VIDEOAGENTS_SNAPSHOT=0turns snapshots off). Restore from the command line withpython -m services.runtime.project_snapshot listand… restore <snapshot> <new project folder>, which never overwrites; there is no button for it yet. Only project folders are snapshotted, not chats or settings. The Agentics engine's one-off image analysis in the footage library now gets only thereadtool. Not exercised: Windows.Agentics engine: each reply may now use up to 65,536 output tokens instead of 16,384 (2026-10-24).
Thinking and the reply share this cap. With
deepseek/deepseek-v4.1-flash-1017on the Agentics channel, storyboard and cinematography agents that had to write a large JSON file in one go spent the whole 16,384 tokens thinking (about 33,000–38,000 characters) and were cut off before they called the write tool, three times in a row. 65,536 is the smallest output limit among the recommended text models on OpenRouter (Gemini 3.1 Pro and 3.5 Flash); the others, including DeepSeek V4, allow more. The cap is only a ceiling and you pay for the tokens actually generated, but a long thinking phase can now run about four times longer before it stops. pi also lowers the cap when the 128,000-token context window is nearly full, so a run with about 90,000 tokens of input still gets roughly 37,000. The local channel stays at 8,192.AGENTICS_MAX_OUTPUT_TOKENSstill overrides the value.
Fixed
Preview pages now show the new image after you set a final version in 🖌 画板 and go back with 「<」 (2026-10-26).
「<」 goes back in the browser history. The preview page did run its scripts again, but the browser reused its cached copy of the page data, so the image kept its old
?v=<modified time>address and the old picture stayed on screen until 刷新. The 场景, 人物, 生物, 道具, 故事板 and 成片发布 pages now always fetch their data fresh, as the 参考文件 page already did. If a browser restores one of these pages from its back-forward cache instead, the page now reloads once (the 参考文件 page used to fetch its list again in that case; all seven pages now share this behavior). Restoring from that cache did not happen in Chromium, because the pages are served withCache-Control: no-store. Checked in headless Chromium (with the back-forward cache on and off) on the 道具 and 人物 pages; not checked in the desktop app, Safari or Firefox.Agentics engine: agents can now see the images they read when the model supports image input (2026-10-26).
The service always declared the model to the built-in pi as text-only, except for the footage library's image analysis. So when an agent read a PNG or JPEG, pi replied 「Current model does not support images. The image will be omitted from this request.」 and never sent the picture, even with
deepseek/deepseek-v4.1-flash-1017, which accepts images. 51 runs in one desktop data folder had this reply, including agents that were checking scene plates. They could only guess from pixel statistics, and dispatches started telling agents not to judge images at all. The Agentics and OpenRouter channels now look up the model's input types in OpenRouter's model catalog before each run. The catalog is fetched through the channel's own endpoint first and then from openrouter.ai, and kept for 10 minutes; if neither can be reached, the last catalog is reused. A model listed with image input is declared as able to see images. A model listed as text-only, a model missing from the catalog, or no catalog at all keeps the old text-only behaviour. For example, DeepSeek V4.1 Flash and Claude Sonnet 5 can see images, while DeepSeek V4 Pro and V4 Flash cannot. The local and cloud channels on 🎨 生成模型 → 语言模型/Agentics each get an 图片输入 checkbox, ticked by default, including for settings saved before this change. Untick it for a model that cannot take images, otherwise a request that includes an image may fail. All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers). Not exercised: a real Agentics or OpenRouter run with an image, whether the Agentics endpoint passes the catalog through, and what a text-only endpoint (for example DeepSeek's own API) returns when it is sent an image.pi and Agentics runs whose last reply is cut off by the output cap now fail instead of finishing as done (2026-10-24).
When a reply stops with
stopReason=lengthand contains no complete tool call, pi ends the run normally with exit code 0, so the run was marked done even though no file had been written; the producer then treated the task as finished. Such a run is now an error that reads 输出被截断 (Output truncated) with the output and thinking token counts and how to raise the cap. A cut-off reply that the model recovers from later in the same run (pi returns an error for a truncated tool call and the model tries again) does not count. If a request earlier in the run failed and pi's automatic retry recovered (for exampleConnection error.), the run now reports the truncation instead of that earlier error. Other engines are unchanged.pi and Agentics runs that recover from a failed request through pi's automatic retry now finish as done instead of error (2026-10-24).
When a model request fails (
Connection error.,Request timed out., a 5xx page), pi retries it automatically, up to 3 times after 2 / 4 / 8 s. The service recorded the failure and never cleared it, so a run whose retry succeeded and that went on to finish its task still ended with 运行以 error 结束 and the old message. On the desktop app on 2026-10-23, all 13 Agentics runs that ended withConnection error.orRequest timed out.had recovered on the first retry and finished their work. A failed request now fails the run only when no reply succeeds after it, i.e. when the retries run out; errors from other sources (a rejected prompt, an engine error event) are kept as before. While pi waits to retry, the run card and the live view show 🔁 请求失败,自动重试 n/3 with the error message (HTML error pages reduced to their text). All 11 UI dictionaries are covered (non-English ones not reviewed by native speakers). The dropped connections themselves are not addressed: the SDK pi uses reports every network-level failure asConnection error., so the logs do not say whether it was a reset, a TLS failure or a DNS problem.