dsh-film 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,7 +37,7 @@ A film workbench for DeepSeek Harness and VibeDev: three right-sidebar tabs —
37
37
  **从 GitHub Release 安装**:插件页的“包名或地址”和上面的命令也接受 Release 里的 `.tgz` 直链,例如
38
38
 
39
39
  ```
40
- https://github.com/VibeDev-Si/dsh-film/releases/download/v0.3.3/dsh-film-0.3.3.tgz
40
+ https://github.com/VibeDev-Si/dsh-film/releases/download/v0.3.4/dsh-film-0.3.4.tgz
41
41
  ```
42
42
 
43
43
  直链不经过安装源,需要本机能直接访问 GitHub(或配好代理)。包约 3 MB。网速很慢时仍可能超过 pnpm 默认的 60 秒下载时限而失败:这时改为按包名从中国大陆镜像源安装;也可以把时限调长:pnpm 11(DeepSeek Harness 和 VibeDev 桌面版自带的就是它)不再从 `~/.npmrc` 读取这个设置,要在 pnpm 的全局配置 `config.yaml` 里加一行 `fetchTimeout: 600000`(Windows:`%LOCALAPPDATA%\pnpm\config\config.yaml`;macOS:`~/Library/Preferences/pnpm/config.yaml`;Linux:`~/.config/pnpm/config.yaml`),或设环境变量 `pnpm_config_fetch_timeout=600000`;pnpm 10 及更早的版本则在 `~/.npmrc` 里加 `fetch-timeout=600000`。
@@ -56,13 +56,18 @@ Requires DeepSeek Harness 0.2.x or VibeDev (VibeDev Next), which is built on it.
56
56
 
57
57
  - **Plugin page** (recommended): Plugins → Add plugin → install a third-party plugin by package name, enter `dsh-film`, pick the npm registry or the China mirror under the install source, and install.
58
58
  - **Command line**: for the DeepSeek Harness desktop app, quit it fully, then run `dsh plugin --profile desktop add dsh-film` (the `dsh` command is installed from the app menu). VibeDev Next's command is `vibedev-app` (app menu → Manage vibedev-app Command…): quit the app fully, then run `vibedev-app plugin --profile desktop add dsh-film`; it keeps its data in `~/.vibedev-app`, which `dsh` does not reach. With the npm `dsh` CLI, run `dsh plugin add dsh-film`.
59
- - **GitHub Release**: the plugin page and the commands also take the release asset URL, e.g. `https://github.com/VibeDev-Si/dsh-film/releases/download/v0.3.3/dsh-film-0.3.3.tgz`. It is fetched straight from GitHub, not through a registry. The file is about 3 MB; if a very slow connection still hits pnpm's default 60-second fetch timeout, install by name from the mirror instead, or raise the timeout — pnpm 11 (the one the desktop apps ship) no longer reads it from `~/.npmrc`, so add `fetchTimeout: 600000` to pnpm's global `config.yaml` (Windows `%LOCALAPPDATA%\pnpm\config\config.yaml`, macOS `~/Library/Preferences/pnpm/config.yaml`, Linux `~/.config/pnpm/config.yaml`) or set `pnpm_config_fetch_timeout=600000`; pnpm 10 and earlier take `fetch-timeout=600000` in `~/.npmrc`.
59
+ - **GitHub Release**: the plugin page and the commands also take the release asset URL, e.g. `https://github.com/VibeDev-Si/dsh-film/releases/download/v0.3.4/dsh-film-0.3.4.tgz`. It is fetched straight from GitHub, not through a registry. The file is about 3 MB; if a very slow connection still hits pnpm's default 60-second fetch timeout, install by name from the mirror instead, or raise the timeout — pnpm 11 (the one the desktop apps ship) no longer reads it from `~/.npmrc`, so add `fetchTimeout: 600000` to pnpm's global `config.yaml` (Windows `%LOCALAPPDATA%\pnpm\config\config.yaml`, macOS `~/Library/Preferences/pnpm/config.yaml`, Linux `~/.config/pnpm/config.yaml`) or set `pnpm_config_fetch_timeout=600000`; pnpm 10 and earlier take `fetch-timeout=600000` in `~/.npmrc`.
60
60
  - **A fresh release**: pnpm 11 installs only versions published at least a day ago (`minimumReleaseAge`). The very first version is not held back: installing by name a package with no earlier version installs it and adds it to `minimumReleaseAgeExclude`. After each later release, an install by name gets the previous version for a day; to get the new one at once, install the exact version (`dsh-film@<version>`) or use the release URL.
61
61
  - **Not from the git repository**: `lib/`, `client/` and `apps/` (the storyboard and director desk front ends) are build outputs that are not in git, so installing from the repository URL fails (it does not leave a plugin that cannot work).
62
62
  - **The VibeDev account & models plugin is optional**: only image and video generation on the storyboard needs [@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev) (formerly dsh-media; sign in to VibeDev at the bottom of the sidebar or in Settings → VibeDev account). Everything else works without it; installing the workbench from the VibeDev Plugin Center installs it too. The storyboard lists for each video model the modes that plugin accepts: lanes that declare no first frame (Seedance 2.5 (VibeDev), 2.5 30s (VibeDev), 2.5 480p 30s (山海) and the three lec lanes; Seedance 2.5 特价按次 takes a first frame and keeps image-to-video) offer no image-to-video, and a single image goes as a 全能参考 (multi-reference) reference image instead, also for nodes saved as image-to-video earlier.
63
63
 
64
64
  Then open the right sidebar of a session that has a workspace and pick a part on its start page. The first time a film tab opens, the plugin creates the film — named after the workspace folder, 16:9, with an empty storyboard — with no form to fill in. Rename it and pick its frame in the header the three tabs share: click the title to edit it (up to 80 characters; Enter or clicking away saves, Esc cancels); the frame is the film's aspect ratio, which the storyboard canvas and the director desk use (16:9, 9:16, 1:1, 4:5, 21:9, 2.39:1). A 4:3 film made by 0.1.0 keeps and shows its frame. To upgrade, install the new version over the old one (no need to uninstall first), then restart DeepSeek Harness / VibeDev: until you do, the workbench shows a banner asking for the restart and does not open the storyboard or the director desk. Your film stays in the workspace's `film/` folder either way.
65
65
 
66
+ ### 0.3.4 版本说明 · 0.3.4 release note
67
+
68
+ - **视频读取范围修复**:媒体服务完整返回播放器所请求的单个字节区间,取消把请求主动截短到 8 MiB 的行为。原片的尾部索引因此能正常读取;响应继续从文件流式发送,客户端断开即停止,不重编码、不替换素材。桌面视频跳转还需要 VibeDev Next 的未压缩响应长度保留修复,两者配合验收。
69
+ - **Media ranges**: the server returns the entire requested byte range rather than truncating it at 8 MiB, allowing players to reach the original file's trailing index. File streaming and cancellation remain intact; media is neither re-encoded nor replaced. Desktop seeking also requires the VibeDev Next fix that retains uncompressed response lengths.
70
+
66
71
  ### 0.3.3 版本说明 · 0.3.3 release note
67
72
 
68
73
  - **撤回了 0.3.2 的「相关组件」入口**:上一版加在剧本、分镜画布和导演台三个标签页尾的那张卡片(插件之间的推荐位)影响页面观感,已经整个去掉;怎么引荐、在哪引荐等重新设计之后再考虑。工作区 `film/` 里的作品和 VibeDev 账号登录都不受影响,其它功能与 0.3.1 一致。
@@ -693,7 +693,7 @@ window.__ModuleLoader__.load({ id: "dsh-film", chunk: "client.workbench.js", fac
693
693
  * an older dictionary, whose translate function echoes keys it lacks.
694
694
  */
695
695
  /** The version this bundle was built as (tsdown defines it); `dev` where nothing does (node tests). */
696
- const CLIENT_VERSION = "0.3.3";
696
+ const CLIENT_VERSION = "0.3.4";
697
697
  /**
698
698
  * Whether the page should ask for a restart.
699
699
  * @param client - the version this page was built as.
package/lib/files.d.ts CHANGED
@@ -1,11 +1,14 @@
1
1
  /**
2
- * Serving one file from disk: a single byte range (so media can be scrubbed
3
- * and large files are sent in pieces), a validator for cheap revalidation,
4
- * and a streamed body that stops when the client goes away.
2
+ * Serving one file from disk: the byte range the client asked for (so media can
3
+ * be scrubbed, and so a player can reach a trailing `moov`), a validator for
4
+ * cheap revalidation, and a streamed body that stops when the client goes away.
5
+ *
6
+ * A range response carries exactly the bytes the request named — no server-side
7
+ * chunking. Memory stays bounded and a lost client stops the read because the
8
+ * body is a file stream, not a buffer; capping the bytes instead would hand a
9
+ * player a truncated file it cannot demux.
5
10
  * @module dsh-film/files
6
11
  */
7
- /** The most bytes one range response carries; the client asks again for the rest. */
8
- export declare const RANGE_CHUNK: number;
9
12
  /**
10
13
  * Read a `Range` header against a file size.
11
14
  * @param header - the request's `Range` header.
package/lib/files.js CHANGED
@@ -1,13 +1,16 @@
1
1
  /**
2
- * Serving one file from disk: a single byte range (so media can be scrubbed
3
- * and large files are sent in pieces), a validator for cheap revalidation,
4
- * and a streamed body that stops when the client goes away.
2
+ * Serving one file from disk: the byte range the client asked for (so media can
3
+ * be scrubbed, and so a player can reach a trailing `moov`), a validator for
4
+ * cheap revalidation, and a streamed body that stops when the client goes away.
5
+ *
6
+ * A range response carries exactly the bytes the request named — no server-side
7
+ * chunking. Memory stays bounded and a lost client stops the read because the
8
+ * body is a file stream, not a buffer; capping the bytes instead would hand a
9
+ * player a truncated file it cannot demux.
5
10
  * @module dsh-film/files
6
11
  */
7
12
  import { createReadStream } from 'node:fs';
8
13
  import { Readable } from 'node:stream';
9
- /** The most bytes one range response carries; the client asks again for the rest. */
10
- export const RANGE_CHUNK = 8 * 1024 * 1024;
11
14
  /**
12
15
  * Read a `Range` header against a file size.
13
16
  * @param header - the request's `Range` header.
@@ -42,7 +45,7 @@ export function parseRange(header, size) {
42
45
  return 'unsatisfiable';
43
46
  end = last === '' ? size - 1 : Math.min(Number(last), size - 1);
44
47
  }
45
- return { start, end: Math.min(end, start + RANGE_CHUNK - 1) };
48
+ return { start, end };
46
49
  }
47
50
  /**
48
51
  * The weak validator of a file version: size and modification time.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-film",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "VibeDev 影视工作台:在 DeepSeek Harness 和 VibeDev 的右侧侧栏里写剧本、排分镜和调度导演台,Agent 用影视工具协同改片 · Film workbench for DeepSeek Harness and VibeDev: screenplay, storyboard canvas and director desk in the right sidebar, with film tools for the agent",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",