Repository navigation
Releases: justintanner/videobook
Release list
videobook 0.4.2
Added
/split @a1 at scenesreviews detected camera cuts one at a time, with
large before and after frames, three frames on each side to move the cut
to, the usual nudges and a ±1s loop across the cut. K keeps a cut, X
removes it, J goes back and ← → nudge by a frame. A filmstrip marks each
cut's status and adds a cut on double-click, removed cuts can be restored,
and weaker candidates can be added for review in one step.split_video_at_scenessplits a notebook video into one clip per scene: it
detects camera cuts, reusing a cacheddetect_scenesresult, then adds a
split cell and one output cell per scene below the source and runs it.
Passcut_points_secondsto split at reviewed times instead.- The Kie Grok Imagine Video 1.5 preview takes a loop image (
@loop) and up
to four timed keyframes (@keyframe1-@keyframe4) in notebooks and
generate_video. Keyframes without a time are spaced evenly over the clip. - MachGen MiniMax H3 Omni turns image or video references into a 768p clip
of 1-15 seconds at 0.02 USD/s.generate_videoaccepts it, and like
MachGen's own app the model picker leaves it out.
Changed
detect_scenesplaces camera cuts on the exact frame and scores each
frame's change against the surrounding half second, so hard cuts in dark
or low-contrast footage are no longer dropped. The default minimum score
is 5, anddetail: "full"also returns every cut, motion settle and a
filmstrip.- The split editor has a cut editor under the source player: large before
and after frames, an eight-frame strip where clicking a frame moves the
cut, and nudges of one frame, 0.1s and 1s. Its Across cut loop replaces
Surroundings. @apicity0.24.0. MachGen image edits take up to 16 images for GPT Image
2, GPT Image 2.5 Sunburst and Flare, and up to 14 for Nano Banana 2 and
2.1, up from nine.- MachGen MiniMax H3 Turbo estimates follow MachGen's current 0.015 USD/s
promotion.
Fixed
- A Grok Imagine Image 2.0 generation with connected images that fails before
reaching xAI is captured underv1.images.edits, the endpoint it would have
posted to, instead ofv1.images.generations, soapicity har report
resolves it. - Notebook generation previews for Grok Imagine Image 2.0 name the xAI image
endpoint,v1.images.editswith connected images and
v1.images.generationswithout, instead of the video endpoint.
videobook 0.4.1
Added
- Optional Omkar trending source for research schedules when
OMKAR_API_KEY
is set, through@apicity/omkar. Status reports omkar as not configured
when the key is unset. The default Thailand schedule makes one trending
request per sample and does not retry it. @apicity0.23.1, including the ElevenLabsscribe_v2cost rate.
MachGen Seedance 2.5 and 2.0 estimates follow that package's public pricebook.- Every fal video endpoint in Apicity, including Seedance 2.0 and 2.5, the
MiniMax H3 family (LoRA, extend, 3D, lip-sync, camera controls and Max
Turbo reference-to-video), Kling O3 Pro and v3, FLUX 3, Wan 2.7, Gemini
Omni Flash, LTX 2.5, Luma Ray 3.2, HappyHorse 1.0 and 1.1, Grok Imagine 1.5,
Cosmos 3, Sora 2, Veo 3.1 and HeyGen video tools. fal also adds Krea 3
text-to-image and edit, Mirelo video-to-audio and Topaz image upscale. - xAI Grok Imagine Video 1.5 with first and last frames, Grok Imagine Video
1.5 Lite, and Grok Imagine Image 2.0 for text-to-image and edits. - MachGen GPT Image 2, GPT Image 2.5 Sunburst and Flare, and Nano Banana 2
and 2.1 for text-to-image and edits of up to nine images; MiniMax H3
Sharpen for MachGen's own H3 videos; and reference-video edit and extend
on MachGen models that support them. - Extend video and Upscale video actions on video cells. Upscale uses
MachGen's 2K regeneration for MachGen MiniMax H3 videos and otherwise the
first configured Topaz upscaler from MachGen, fal or Kie. - Live splice preview in the splice inspector and the chat splice review: it
plays the first clip into the second at the predicted cut, and a
frame-match curve sets the overlap, with a best-match jump and a quality
grade. The read-onlypreview_splicetool scores the cuts, and
splice_videocuts where the preview shows. change_video_speedretimes a section withstart_secondsand
end_seconds, and its review sheet edits the range, speed and target
duration in place with a live preview.
Changed
- ElevenLabs
scribe_v2speech-to-text usage is estimated from the audio
duration already known to the transcribe, caption, sync, render, archive,
extend and sound-removal paths. A request with no duration stays unpriced. trending_researchwithout arguments creates or addresses the Thailand
schedule (Asia/Bangkok, 00:30 cutoff, four samples, top 10), and
/trending scheduleand/trending THboth work.- The Post inspector shows a live preview, Clip, Caption, Deliver, Link and
Results progress, a platform picker, a caption counter against the
platform limit and a delivery rail for iPhone, download and X. - Save to iPhone has a compact caption and an animated iCloud upload status,
including progress a sync relay reports for servers without iCloud Drive. - The composer's voice control is a phone button that rings while a call
connects and hangs up on hover; the text button ends a call and returns to
typing, and send sits beside the chat model menu. - Notebook cells show tags naming where their wires go instead of bare port
dots. - Workspace action settings use a compact grid, so actions such as
/trendingfit on screen. - Watermark handles default to 28px of vertical padding.
Fixed
- Research runs that earlier builds left with stale download errors settle
on the next scheduler tick, and their rank cells, summary and status
recover without new downloads. - Research archive spend stays visible after retention deletes a day book:
archive usage moves to the control book, andtrending_researchstatus
reports it.
Security
@modelcontextprotocol/node2.1.2 and@hono/node-server2.1.5.
honois no longer a direct server dependency; the SDK depends on it.
videobook 0.4.0
Added
- Daily TikTok research books with ranked clips, source provenance and a
download-status summary. Country schedules support local cutoffs, sampling,
ranking, retention and optional downstream processing; repeated cuts reuse
the same day book, and schedules resume and catch up after a restart. trending_researchMCP tool withschedule,unschedule,list,run
andstatusoperations, also available throughvideobook runfor cron.- Endless public trends and TikTok Creative Center adapters through Apicity,
with normalized sightings, source health and promoted-content filtering.
Fixed
- TikTok downloads use yt-dlp browser impersonation when available, optional
cookies, pacing and retries, with failure reasons retained on research cells. - Research rank cells and the summary now follow download completion and retry
recovery, clearing stale errors after a successful download.
videobook 0.3.3
Added
- A TikTok-style subtitle editor in the chat composer.
/subs @video, a
video cell's Subtitles menu item, or asking chat or voice for subtitles
opens it beside the chat: a portrait preview that plays with audio and
highlights each spoken word, an editable transcript (text, timing, hidden
and inserted words, phrase splits and joins), style, size, colours,
outline, padding, language, frame and timing controls, and a draggable,
keyboard-adjustable vertical position for all phrases or one. Drafts save
as you edit, export to SRT or WebVTT, and Render creates a new subtitled
video cell below the source (later renders become versions of it). The
source video is never changed. caption_videoMCP tool withop: get | prepare | update | render.get
reads the draft and preparation status without starting work (detail: fulladds the document, face/text regions and loudness envelope);
preparestarts word-timed transcription, vocal timing, optional face
and on-screen-text placement and translation;updatesaves edits, a
replacement document or a resolution (reseed,realign,
keep_timings,discard) againstexpected_revision;rendertakes the
reviewed revision,source_hashand a stablerequest_idand returns the
same job on retries. Onlypreparespends money.- Caption analysis is keyed by content: repeated or concurrent requests reuse
one job, cached results return without provider calls, a failed refresh
keeps the last result, and results for a video that changed mid-analysis
are discarded. Subtitles render with bundled Montserrat and Anton (OFL),
load Noto Sans subsets on demand for other scripts, and handle
right-to-left text. forceontranscribe,translate_subtitles,describe_image,
detect_scenes,suggest_cuts,suggest_sfxandanalyze_jokes
(analyze_videoalready had it) to run again on unchanged inputs.- Subtitles can replace the video in place instead of adding a new cell:
choose Replace video beside the subtitle editor's export buttons. Render
burns the subtitles into the source video, keeps its earlier version in
history, and the cell shows RENDERING until the job finishes.
caption_videorender takesoutput: "new" | "replace". /postposts a clip in one step. One sheet offers three destinations:
iCloud · iPhone, Download (the clip and caption.txt download to this
computer for a manual upload) and X, now or scheduled. Applying a
destination creates the Post when needed, freezes the clip and caption and
delivers them. A clip's menu offers Post…, and a Post's menu offers Save to
iPhone and Download./filesserves an artifact file as an attachment when given
?download=<name>, so download links save instead of playing inline.- Eighteen more MachGen video models. The picker offers LTX 2.3 Pro,
MiniMax H3 Turbo, Seedance 2.0 Fast and Mini, Kling 3.0 and Kling 3.0 Omni,
Veo 3.1 and Veo 3.1 Fast, Pixverse V6 and C1, HappyHorse 1.0 and Grok
Imagine Video. Wan 2.2 A14B, Vidu Q3, Q3 Turbo, Q3 Pro, Q3 Pro Fast and Q4
Preview, which MachGen hides from its own picker or keeps private, are
available throughgenerate_videoandlist_generation_modelswith
include_hidden. Each model offers the resolutions, lengths, aspect ratios,
frames and references MachGen accepts for it and is priced from MachGen's
pricebook. Kling 3.0 Omni takes multi-shot settings:shot_type: "intelligence"lets the model plan the shots, and"customize"takes
multi_promptandshot_durations, which must add up to the duration. - MiniMax H3 2K regeneration (
machgen:MiniMax-H3/upscale, available through
generate_video): connect a 5-15 second MiniMax H3 768p video that MachGen
generated, and MachGen renders it again at 1440p from its original prompt
and inputs. It costs $0.05 per second of the source, counted twice (in and
out). Other videos and URLs are refused before anything is spent.
Changed
-
The posting MCP tools shrink from 15 to 8.
posttakesto: icloud | download | x | draftwithasset_idfor a new Post orpost_cell_idfor
an existing one.list_postsreads one Post withpost_cell_idand the
X posts waiting to publish withstatus: "scheduled".update_posttakes
urlandposted_atafter posting by hand, andcancel_scheduleto turn a
scheduled X post back into a draft.record_post_metricswithout values
fetches the current X metrics.service_statuswithservice: "icloud",
book_idandpost_cell_idreports whether a Post's files finished
uploading. -
The Actions form and a timeline track's add-clip chooser are no longer
modal dialogs. Both open as a review docked in the chat composer, like a
generation review: Apply, or Enter on/apply, runs the action or adds the
chosen clip, and Cancel, Escape or/cancelcloses it. An action that needs
confirmation shows its review and estimated cost on the first Apply and runs
on the second; read results and their links stay on the review. In the
fullscreen timeline editor the add-clip review docks at the editor's foot. -
Image models default to 2K again (or the highest resolution they offer
below 2K) instead of their highest resolution; 4K stays available to
choose. New goals plan their scene at 2K. Video models keep their highest
resolution, and a resolution a notebook remembers from a cell still applies. -
Render in the subtitle editor no longer waits for the video: it queues the
render, closes the editor and frees the chat, and the chat turn follows the
job until the subtitled copy or the updated video is ready.caption_video
render also returns the job'sjob_id,statusandoutput_artifact_id
at the top level. -
Every analysis tool is keyed by the content it reads: speech-to-text by the
transcribed audio and settings, translations by the timed transcript and
language, video analysis by the video and the transcript it used, image
descriptions by the image, scene scans by the video, cut and sound-effect
suggestions by the video, transcripts, analysis and instructions, and joke
analysis by the timed transcript. A repeat returnsstatus: "cached"
(suggestions and jokes include the earlier entries) without a provider
call, a job or a write; otherwise the tools returnqueuedorrunning
with a numericjob_id, and concurrent or forced requests join one job.
These tools no longer returnenqueued,already_analyzedor string job
ids.
Automatic transcription and analysis jobs skip the provider when their
result is current, results whose inputs changed mid-run are discarded, a
failed refresh keeps the previous result, and undoing an edit serves the
earlier analyses again. Sidecars written by earlier versions are adopted
once instead of being paid for again. -
describe_imagereturns the script asset it already wrote for an unchanged
image instead of creating a new one per call. -
Captions, keyword titles and watermark placement share one cache of face
and on-screen-text regions per video frame, so each pass only sends frames
no earlier pass analysed. -
A render with a translated
subtitle_languagefails with the reason when
the translation cannot be made, instead of burning the original language. -
Editing a video's picture or sound still deletes its video analysis and,
for sound or timing edits, its transcripts; scene scans, suggestions and
joke analyses are kept and simply stop matching the edited media. -
Thai, Lao, Khmer, Burmese, Chinese and Japanese speech is read as words.
ElevenLabs returns these scripts a letter at a time; transcripts,
subtitles, SRT exports, the transcript card, search text, suggestions and
translations now join the letters into dictionary words without spaces
between them, Thai syllables the dictionary does not know (loanwords,
colloquial particles such as เหรอ) stay whole, and a space in Thai ends a
subtitle phrase so it is never silently dropped. Subtitle phrases are
measured by visible width (Thai vowel and tone marks take none, CJK
characters take two), the seven-word cap applies only to spaced scripts,
and a clause too long for one phrase splits into the fewest even phrases.
The Impact and Highlight render styles no longer put gaps between Thai or
CJK words. Short Thai and Chinese speech now counts as dialog, so it is
transcribed automatically. Translations from Thai send whole clauses to the
translator, and translations into these languages time real words instead
of character pairs. Subtitle drafts saved by earlier versions are
discarded, and caption vocal timing is measured again once per video. -
/aliveopens the new subtitle editor. Saved Alive caption settings seed
the editor's style, a matching saved Alive analysis is reused instead of
being paid for again, stored renders that still use thealivesubtitle
style render through the new captions, and queuedanalyze_alive_captions
jobs run caption preparation. -
render_videoandrender_projectno longer accepthighlight_style: "alive"; usecaption_videofor word-timed subtitles.
Removed
- The
create_post,get_post,link_post,save_post_to_icloud,
post_icloud_sync_status,refresh_post_metricsand
upload_post_to_dropboxMCP tools and their slash commands. Usepost,
list_posts,update_post,record_post_metricsandservice_status
instead. - Dropbox delivery: the Dropbox connection in
connect_serviceand
service_status, its Settings card and the@apicity/dropboxdependency.
It needed a Dropbox app that was never configured, and Download covers
manual uploads. - The
alive_captionsandset_alive_captionsMCP tools and the
full-screen Alive captions studio. Usecaption_videoand the subtitle
editor instead.
Fixed
- A Post delivery that finishes no longer overwrites a destination chosen
while it was still...
videobook 0.3.2
Added
- The KIE Grok Imagine Video 1.5 preview's 1080p tier, priced at $0.04 per
second. At 1080p it takes exactly one image (image_urls); 480p and 720p
still take more.
Changed
- Every
@apicitypackage is at 0.19.0. - The KIE Grok Imagine Video 1.5 preview defaults to 1080p, its highest
resolution, askie:grok-imagine/image-to-videoalready does. A request
with more than one image needs 480p or 720p and is refused before
anything is spent. - The KIE Grok Imagine Video 1.5 preview sends
nsfw_checker: falseby
default, the default KIE documents and every other KIE video model with
the setting already sends. 0.3.1 senttrue; passnsfw_checker: trueto
keep KIE's content filter on. - KIE Seedance 2.5 keeps generating audio by default. apicity 0.19.0 now
defaultsgenerate_audiotofalse, but Videobook still sendstrue
unless a request turns audio off. - MachGen estimates follow the 0.19.0 pricebook. A MiniMax H3 run with a
first and a last frame is priced at the image-to-video rate ($0.035 per
second at 480p instead of $0.05), and Wan 3.0 references that include a
video add the reference video's seconds to the output's. - KIE OmniHuman 2.0 generations turn KIE's watermark off by default
(enable_watermark: false); passenable_watermark: trueto keep it.
OmniHuman 2.0 videos generated with 0.3.1 carry the watermark. OmniHuman
1.5 has no watermark option.
Fixed
- A catalog model the installed apicity packages cannot resolve no longer
fails the whole model listing, which left every book looking empty on
load. The listing skips that model and logs amodel-unresolvable
warning naming it. - Queued KIE OmniHuman 1.5 and 2.0 generations pass their driving audio's
length to the cost estimate, so the KIE paygate estimate is bounded and the
usage row is priced. - Queued KIE HappyHorse video edit and Kling 3.0 motion control generations
pass their source video's length, and Volcengine lip sync passes its audio's
length, so their paygate estimates and usage rows are priced too.
estimate_costnow prices Volcengine lip sync from the audio, whose length
the output follows, instead of the source video. - The usage counter groups each catalog generation under its catalog media.
34 KIE and fal models, among them OmniHuman, the HeyGen digital twins, the
Gemini and ElevenLabs speech models and the Bria image models, were counted
as analysis, and fal Wan 2.7 image edit as video. - KIE Suno music and sound generations now reach the usage counter as audio,
priced at KIE's flat rate per generation: $0.06 for music and $0.0125 for
sounds. Their status polls settle the row: a lyrics-only result stays
pending, and a failed generation is not counted as spend. - KIE generations stay pending in the usage counter until their task
settles. A queuing or generating KIE task, or a Veo task that is still
generating, was counted as settled spend at its first status poll, and a
Veo generation that failed while generating (successFlag3) was counted
as completed spend. - A Veo generation that fails while generating now fails with KIE's error
message at the next status poll. It was treated as still processing and
polled until the pending-task timeout.
videobook 0.3.1
Added
- KIE Kling 4.0 reference-to-video and keyframe-to-video, 3 to 30 seconds at
720p or 1080p. Reference-to-video takes up to ten images and five videos,
and generates from the prompt alone when none are connected. Keyframe-to-video
takes a first frame, up to eight middle keyframes and a last frame, as many
as the duration allows. Prompts name connected media the way Kling 4.0 does:
@image_1,@video_1,@first_frame,@keyframe_1and@last_frame. - KIE PixVerse V6 Max text-to-video and image-to-video, 1 to 15 seconds at
360p to 1080p, with optional generated audio and a seed. Image-to-video
follows the image's aspect ratio. - KIE OmniHuman 2.0, which animates one image to a driving audio track at 720p
for as long as the audio runs, with an optional prompt of up to 300
characters. KIE's watermark stays on by default (enable_watermark). - The KIE Grok Imagine Video 1.5 preview, the KIE Grok Imagine endpoint that
takes first and last frames, a loop image (loop_url) and up to four timed
keyframes. It shares the Grok Imagine Video 1.5 image-to-video frontier
ranking. Kling 4.0, PixVerse V6 Max and OmniHuman 2.0 are on no top-10 board
and appear in the unranked group.
Changed
- Upgrade all
@apicity/*dependencies to 0.18.1, which prices the new KIE
models. Its endpoint catalog now lists falv1.queue.statusand
v1.queue.result, with the other fal SDK methods written as method
shorthand, soapicity har reportfrom@apicity/cli0.18.1 can resolve the
fal polling captures Videobook writes. The requests sent to fal are
unchanged. - Image and video models default to a 12-second duration (or the nearest
allowed length), a 9:16 aspect ratio and their highest resolution, quality
and bitrate. Each notebook remembers the last duration, aspect ratio,
resolution and quality a cell used, and applies them to new cells and model
switches. Goals saved before this change keep their 2K scene; new goals use
4K. - On desktop, Settings shows AI providers in one column and accounts, storage
and diagnostics in another; on phones the columns stack behind section jump
buttons. The chat input stays a plain bar on Settings. - The Library opens from an Assets button in the notebook toolbar instead of
the header, and Arrange is renamed Clean. - Library browsing pages assets before building their rows and no longer runs
ffprobe while listing; proxy checks and duration backfills run as background
jobs. - A Post can take its published link without being saved to iPhone or Dropbox
first.
Fixed
- HAR captures of KIE's nested Veo and Suno SDK calls are named by their
apicity catalog dot paths, such asapi.v1.veo.generateand
api.v1.generate.sounds, instead of their SDK paths, soapicity har report
resolves them. Sub-provider prefixes that are URL segments stay:
kie.claude.post.v1.messagesis namedclaude.v1.messages. - A generation that fails before reaching its provider, such as a request the
schema refuses, is captured under the provider's catalog endpoint, and fal,
Alibaba and KIE file uploads are captured asstorage.upload.initiate,
api.v1.uploadsandapi.fileStreamUpload, soapicity har reportresolves
them. - A notebook generation whose provider fails after accepting the request now
marks its plan failed with the provider error.list_notebook_generation_plans
and the Jobs screen kept reporting such plans as awaiting output. - v3 goals saved with a 2K scene load again and keep that resolution when they
are edited, approved or retried. - Image subject edits check the provider key before uploading the source image,
so a missing or placeholder key no longer sends the image to a public file
host for a request that cannot run. - Settings loads when the page opens on it, or when it opens before the MCP
connection is ready. - The multyculty workflow and video poster recovery tests no longer time out on
loaded hosts, and the chat-composer browser test no longer reads the runner's
.envor provider keys and matches the ranked model picker.
videobook 0.3.0
Added
- Opt-in local provider HAR diagnostics with Settings, MCP and CLI controls, concurrent book attribution and retention limits.
Captured SDK calls are named by their apicity catalog dot path, such as
api.v1.jobs.createTask, soapicity har reportattributes them to their
endpoints. - The Request payload panel of a queued, generating or failed cell downloads
the attempt's scrubbed captures as one HAR file, or shows "Capture off" with
a link to Settings.inspect_generation_requestreports whether an asset has
a capture, with its path and outcome; the newget_generation_hartool
returns the HAR for an asset or attempt id. videobook har listandvideobook har export --out <dir|file.tar.gz>,
both with--since,--failuresand--provider. Export re-runs the
@apicity/harscrubber on every capture and refuses, naming the file, when
scrubbing would change it. Otherwise it writes the captures with an index
and a manifest and prints theapicity har reporthand-off.
Changed
- Upgrade all Apicity dependencies to 0.18.0.
videobook 0.2.5
Added
- Thirteen fal video endpoints: Kling 4 text, frame, reference and editing;
HeyGen Video text, image and reference generation; HeyGen Avatar 3/4/5
stock digital twins, Avatar 4 image animation, and Video Agent v2/v3. - HeyGen Video text and reference models appear in the ranked pickers.
Kling 4 appears in the unranked group. Digital twins accept spoken scripts
with stock avatar and voice defaults; Avatar 4 image animation defaults to Ivy.
Changed
- Upgrade all Apicity packages to 0.17.1 and refresh generated model documentation.
videobook 0.2.4
Added
-
Image and video model pickers show frontier rankings from the offline
@apicity/costsnapshot, with rank, Elo and price for the selected operation.
Other models follow in their existing order; unconfigured providers are
marked unavailable. Saved selections and default models stay unchanged. -
MachGen as a video provider, with six models: MiniMax H3, Seedance
2.5, Seedance 2.0, Wan 3.0 and HappyHorse 1.1 for text, frame and
reference video, and Grok Imagine Video 1.5 for image-to-video. Each
model offers its own resolutions, durations and aspect ratios, and
cost estimates come from the@apicity/costMachGen per-second rates.
Wan 3.0 always sends MachGen's documented adaptive, 30 fps, with-audio
config. Generations run as provider tasks: Videobook polls MachGen and
downloads the finished video with the API key. -
MACHGEN_API_KEYis a managed key.videobook config, 1Password
resolution and the provider keys panel include it. Without it, MachGen
generations stop with "MACHGEN_API_KEY environment variable is not set"
before an asset is created, and pending MachGen tasks wait unpolled. -
Seedance 2.5 Draft Complete (
kie:bytedance/seedance-2-5-draft)
renders the 1080p final of a 480p Seedance 2.5 draft from the draft's
Kie task id. A draft rendered in the same book supplies the billed
seconds and reference video seconds for the estimate. The Kie Seedance
2.5 model gains the matchingdraftoption.
Changed
- Upgrade all application
@apicity/*dependencies to 0.17.0 and add
@apicity/machgen. - Kie Seedance 2.5 estimates use the 2026-10-22 rates, for example
$0.79 per second at 1080p without a reference video, up from $0.57.
videobook 0.2.3
Added
- Fal FLUX 3 Max text-to-video, image-to-video, and keyframes-to-video,
with generated audio and resolution-tiered per-second cost estimates. - Bria Fibo 2 text-to-image with structured VGL prompts, and Fibo 2 Edit
for one to four reference images, including the image editor. - H3 Max Reframe Video, which outpaints a source video to a target aspect
ratio at 480p, 768p, or 1080p while keeping its audio and timing.
Priced from fal's historical average because the request does not fix
the billed duration.
Changed
- Upgrade all application
@apicity/*dependencies to 0.16.3. - Windows x64 is supported. The release check runs the pack-and-install
smoke on Windows and blocks the release when it fails. Stopping
videobook servefrom another process still ends it without a clean
shutdown, because Windows has no SIGTERM, and the next start replaces
the lock file. - Dynamic fal requests are priced from fal's historical average when
FAL_ADMIN_API_KEYis set. Without the key, and for the two Seedance
formula gaps, the estimate stays at the local $0.