Skip to content

Releases: xuhao1/whalesong-studio

Whalesong Studio 0.1.2

Choose a tag to compare

@xuhao1 xuhao1 released this 17 Oct 13:38

中文

更新后重启 DSH 即可,不用重装插件,也不用改设置。

  • 配音的语气(百炼 qwen-audio-3.1-tts-next):每个声音录一段样带——同一副嗓子平常说话、大吼、耳语、大笑、带哭腔——每句台词都照它说,导演写的语气就是"这一句怎么说"。不按关键词换声音。以前的样本是一句平静的话,什么语气都被拉回平常说话。
  • 每句由 omni 模型听一遍:百炼 qwen3.8-omni-flash(用同一个百炼的 key),判断字念对没有、是不是这副嗓子(吼的时候嗓子被拉尖、像卡通也算不是)、语气往导演要的方向走了多远(1–5)。不过关就重录;每段样带录完也先听,吼得拉尖的重录。不再按音高判断。页面上每句显示"语气 x/5",悬停看它听到了什么;设置里"听检的模型"填 none 就不听。
  • 已经录好的配音不会自己重录:要新的语气,整章强制重录一次。第一次配一章会慢一些,每个声音要先录样带、听样带。
  • 卷梗概:大纲里卷的菜单"照各章写卷梗概";写手写一章时带上本卷的梗概和目标。
  • 导入整理人物时把"反派""第二主角"说清楚:情敌、立场不同、戏份多都不算。
  • 界面:单行输入框写满就换行、自动长高;写作页单击标题就能改;大纲的"推演后续章节"成了章节列表上方的大按钮。

English

Added

  • A volume's synopsis from its chapters. A volume's synopsis and goal could only be typed in by hand (or were set once on import); a book imported as one long volume had none, and nothing wrote one from what its chapters came to be. A volume's menu now has Synopsis from its chapters, and Every volume's synopsis from its chapters where there are several (ai.volumeSynopsis, ai.volumeSynopses; the showrunner: novel_derive kind=volume). The continuity editor writes it in one plain request off the volume's chapters — the written ones by their digests, the others by their outlines, as what is still to come; a long volume goes ten chapters at a time where the book has those stretches summed up, else a line a chapter, and the result says which. It is shown nothing of the synopsis the volume had, nor its goal, nor the next volume's plan (shown them, the model wrote the plan into the story as though it had happened): the old synopsis is held against the new one in a second, short request, point by point, and what of it no chapter has reached is kept at the end in its own words, marked Still to come (as planned). The goal is filled only where it is empty. What was there stays in the volume's history. Write one from the chapters in Edit volume only fills the field, and closing that dialog with edits not saved asks first (src/core/pipelines/volume.ts).
  • The writer is given its volume. Drafting, going on with or revising a chapter of the main line, and laying out its beats, now carry the volume's synopsis and goal, before the chapter's own outline and outside the part that stays the same from chapter to chapter.

Changed

  • One-line fields wrap and grow. A field of one line — the direction left of Continue and Compare on the writing page, a card's aliases, a beat, a revision request, the glossary, most fields of a form — scrolled sideways once what was typed outran it, so a sentence could not be read back whole. It now wraps and grows with the text (up to eight lines, then scrolls), and is as tall as before while it fits. It is still one line: Enter does what it did and makes no new line, and a line break pasted in becomes a space. Passwords, numbers and fields with a list to choose from are inputs as before (TextInput, src/client/ui.tsx). On the writing page the buttons beside the direction stay level with its first line.
  • A chapter's title is renamed with one press. On the writing page the title became a field on a double-click, which nothing said; one press does it now, and it shows it can be pressed. Narrow, where the title is the list of chapters, the pen beside it renames, as before.
  • Deriving is the outline's first button. Derive was a small outlined button among the tools above the chapters, its use said only on hover. It is now Derive the next chapters, a full button in a box of its own above the chapter list, with a line beside it saying what it does — the planner plots the next chapters of the line from what is written, and nothing enters the outline before you choose; or a what-if — and, when chapters derived before are waiting, that they are.

Fixed

  • Every voice spoke every line calmly, however it was directed (Bailian audio, qwen-audio-3.1-tts-next). A described voice speaks each line after a sample of itself, and the model copies the sample's register with its timbre: the sample was one calm sentence, so "roars", "sneering" and "a breathless murmur" all came back as talking; the direction was only a remark in brackets, under "a quiet booth". And the take check counted a voice raised above 1.42× its usual pitch as someone else's, and kept the calmest take. Now a voice's sample is a reel — the same voice talking, shouting, whispering, laughing and near tears, recorded once and kept in the book (audio/voices/reel-….wav) — and every line of that voice imitates the same reel, with its direction said as the act itself ("@voice1 says this line roaring over the engines, word for word"). Nothing picks out lines by keyword and no other clip is swapped in for any of them. A designed voice records its reel from its preview, so it stays the voice that was chosen. Each reel is heard by the listening model (below) before a line imitates it, and recorded again from another draw — three times at most — when its voice changes along the way (most often a shout pulled thin and shrill), does not match the description, or its ways of speaking are not well apart. The calm samples of earlier versions (anchor-….wav) are no longer read; lines voiced from them keep that voice until voiced again (force). Compared by qwen3.8-omni-flash two takes at a time, both ways round, on 赵铁锚's 去他娘的99.8%!老子信邪!: the old way came last of five, and a line from the reel came first.
  • Takes are heard, not pitch-tracked. Whether a take is still the voice, whether its words are the line's, and how far its delivery went toward the direction, are now heard by an omni model on Bailian (tts.listenModel, by default qwen3.8-omni-flash, with the same key): it is given the voice's reel and the take, asked how far the take moved from the ordinary talking that opens the reel (1–5) — not whether the line "sounds angry", which it says of any curse read flat — and told the words do not count. A take heard misread (misread), in another voice — or in this one pulled thin, shrill or cartoonish (drift) — or at 2 or less (flat) is spoken again within tts.retakes, and of the takes that pass the one played furthest is kept. The script shows each heard line's score and, on hover, what was heard; the hearings are in the usage ledger as Listening to takes. Pitch is no longer measured at all; voice sheets keep the prints they had, unread. Lines already voiced are checked again by length and loudness only. Without a Bailian key, or with tts.listenModel: none, takes are measured only, and a run that lost its key says so (src/core/media/listen.ts). Issue 5 of the recommendations names the listening model.
  • Character roles on import read "antagonist" as anyone on the other side. The cast prompt defined the role as "对立面" and "deuteragonist" by the weight of a part, while the Studio shows antagonist as 反派 (villain): 《红楼梦》 came out with 薛宝钗 a villain and 王熙凤 a second lead. The rule now says what each role is — one protagonist as a rule; a second lead the story follows as much, not merely someone with many scenes; a villain sets out against the protagonist, and a rival in love or someone of another side is not one, many books have none — and to take the lower role when unsure and the common reading of a well-known book. The agents' card fields say the same. Asked three times on 红楼梦's sixteen main people: before, 王熙凤 was a second lead every time and 林黛玉 a second protagonist; now 贾宝玉 leads, 林黛玉 and 薛宝钗 are the second leads, 王熙凤 is supporting. Books imported before keep their roles; change one on the card.
  • A volume's menu could be pushed out of the chapter list. A long synopsis beside it squeezed the menu button out of the narrow list, where it was cut off; the synopsis now shows in two lines under the volume's name (pressed: whole, with the goal), and the volume's buttons keep their size. A task about a volume says its name, not its id.

Whalesong Studio 0.1.1

Choose a tag to compare

@xuhao1 xuhao1 released this 16 Oct 16:37

中文

修复版,不用重装插件,更新后重启 DSH 即可。

  • 用 ChatGPT 订阅(GPT-6.1 Sol)时,收录、审校、一次写成的章节不再失败。 工坊的一问一答调用会带 temperature,ChatGPT 的接口回 Unsupported parameter: temperature。现在被拒就不带它再发一次,这条路由之后不再带;调用记录也如实记"没发"。
  • 批量顺序写时,某一章收录失败不再让后面的章节停下。 后一章照前一章的正文写,那一格会注明"前一章没收录上";前一章写作失败的,后一章照旧不写。以前批量写三章,收录一失败就只写出一章。

English

A bug-fix release: no reinstall; restart DSH after updating.

Fixed

  • Models that refuse a temperature (ChatGPT's GPT-6.1 Sol). Every call the Studio makes outside an agent's run — digests, reviews, a chapter written in one request — sends the role's temperature, and DSH passes it on as it is. ChatGPT's endpoint answers Unsupported parameter: temperature (HTTP 400), so on a ChatGPT subscription every such call failed. A route that refuses one now gets the call again without it, and is sent none after that; the record of calls no longer says a temperature went where none did, on direct routes either.
  • A batch that writes goes on when a digest fails. Written one after the other, each chapter waited for the digest of the one before, and a digest that failed kept every chapter after it from being written: asked for three chapters, the batch wrote one. A chapter now waits for that digest to be over, however it ended, and is written from the text before it where it failed — its cell says so. A chapter that could not be written still keeps the next from being written.

Whalesong Studio 0.1.0

Choose a tag to compare

@xuhao1 xuhao1 released this 16 Oct 16:15

中文 | English

鲸歌工坊 0.1.0

第一个带版本号的发布。

鲸歌工坊是 DeepSeek Harness(DSH)的长篇小说插件:一位总编和一组班底(场记、策划、导演、后期)作为 agent 在 DSH 自己的 agent 循环上干活,正文交给单独配置的写手模型;设定集、群像、插图、有声剧、有声漫、视频和可玩的幕间都在同一本书里。

需要:DeepSeek Harness 0.2.0-rc.2 及以上、0.3 以下。在 0.2.0-rc.2、0.2.1-alpha.4 和 0.2.1-alpha.5 上测过。

安装:下载下面的 whalesong-studio-0.1.0.tgz,在 DSH 的插件 → 添加插件里填它的绝对路径,装好后重启 DSH。其他装法(github:xuhao1/whalesong-studio、源码目录、dsh web)见 README。

从改名前的版本升级:插件页里如果还是 dsh-novel-writer,先移除它,再添加这个包,然后重启 DSH。先移除、再添加,反过来会装成两份。书、设置、存好的 key 和对话都不受影响。

这一版有:

  • 总编和班底:每个角色都是总编对话下面的子智能体,每一步都有记录,能从对话标题处点开看;交回的方案可以接着说修改意见,由同一个角色改。
  • 模型:写手和各个角色可以分别配模型。ChatGPT Plus / Pro 订阅、阿里云百炼、OpenRouter 都可以在引导页一键接上,插图、配音和检索也一起配好。
  • 写书:设定集、人物卡与群像追踪、多条故事线、章纲推演、审校意见与修订提案、版本对比。
  • 演出:插图、有声剧、有声漫、视频、可玩的幕间;整本书可以发布成网站。
  • DSH 0.2.1:0.2.1 去掉了 {{cwd}} 提示变量和 subagents.start()。这一版在 0.2.0 和 0.2.1 上都能用。

完整的变更记录在 CHANGELOG.md。


Whalesong Studio 0.1.0

The first numbered release.

Whalesong Studio is a long-form fiction plugin for DeepSeek Harness (DSH): a showrunner and a crew (continuity, planner, director, post-production) work as agents on DSH's own agent loop, and the prose goes to a writer model of its own. Story bible, ensemble cast, illustrations, audio drama, motion comics, videos and playable interludes live in the same book.

Requires DeepSeek Harness 0.2.0-rc.2 or later, below 0.3. Tested on 0.2.0-rc.2, 0.2.1-alpha.4 and 0.2.1-alpha.5.

Install: download whalesong-studio-0.1.0.tgz below, enter its absolute path under Plugins → Add plugin in DSH, then restart DSH. Other ways (github:xuhao1/whalesong-studio, a checkout, dsh web) are in the README.

Upgrading from before the rename: if the Plugins page still lists dsh-novel-writer, remove it, add this package, then restart DSH. Remove first, then add; the other way round installs it twice. Books, settings, saved keys and conversations are not touched.

In this release:

  • Showrunner and crew: every role is a subagent under the showrunner's conversation, every step on record and open from the conversation's header; a plan it hands back can be adjusted by the same role.
  • Models: the writer and each role take models of their own. A ChatGPT Plus / Pro subscription, Aliyun Bailian or OpenRouter connects in one click on the guide page, with pictures, voices and search set up along with it.
  • Writing: story bible, character cards and ensemble tracking, plot lines, chapter planning, review issues and revision proposals, version comparison.
  • Staging: illustrations, audio drama, motion comics, videos, playable interludes; a whole book can be published as a website.
  • DSH 0.2.1: 0.2.1 removed the {{cwd}} prompt variable and subagents.start(). This release works on 0.2.0 and 0.2.1 alike.

The full record of changes is in CHANGELOG.md.