Repository navigation
feat(short_drama): turn a novel into vertical drama episodes on TRTMC - #1932
Draft
chaofengw-nv wants to merge 45 commits into
Draft
chaofengw-nv wants to merge 45 commits into
chaofengw-nv wants to merge 45 commits into
Conversation
Restore the family-owned original image-reference pipeline and its staged bundle writer on the current API. Keep automatic support discovery and the original single-window public behavior unchanged. Add private synchronized AV guide layout, target-only sampling, clean-audio AdaLN cache invalidation, global window clocks and channel-correct latent-tail accumulation. Add a real backend guide trajectory oracle without changing the existing FP32/BF16 criteria. Validation: 280 CPU family/bundle regressions, one new guide profile test, four C++ host executables, 176 exact upstream layout vectors and 13 exact upstream clock windows passed. The new GPU guide oracle is not yet executed. The retained trained encoder/video failures remain unqualified; this commit does not advertise trained continuation or production quality. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Add a separate 226-frame experimental bundle profile with synchronized video/audio latent guides, two complete 49-forward windows and cumulative decoding. Preserve the original single-window profile and residency options. Reject child profile limits before first-window inference, retain each stereo channel prefix, and serialize the complete request across the AdaLN cache transition. Add an independent native 98-forward oracle with synthetic weights. Validation: CPU family regression and window fixture, six host executables, native probe syntax, family ownership and formatting checks passed. The new GPU oracle and full trained continuation remain unqualified on this revision. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Build the two changed continuation plans from a pinned original image bundle. Verify its complete digest, original profile, checkpoint, tokenizer and BF16 provenance before loading weights; stream and rehash the six unchanged plans. Record reused plan digests and preserve the original bundle. Share exact runtime metadata with the existing full builder. Runtime and graph math are unchanged. Validate both residency presets, source mismatches, streaming mutation rejection and the existing full build wiring with 59 CPU cases; ownership and formatting checks pass. Full trained execution remains unqualified until the target build and video validation complete. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Allow an explicit second-window prompt on the bounded 226-frame Ref2VA profile. Encode both prompts with the original references, validate child conditioning before first-window inference, and anchor both windows after the longest text prefix as in the fixed upstream implementation. Keep empty and identical prompt behavior, original sampling, media clocks, and residency policies. Add shorter/longer text trajectory cases without changing numerical criteria. Host validation passes; GPU trajectories and trained dialogue quality remain to be verified. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Apply repository-pinned clang-format 22.1.8 to the source-quality diagnostics. Only whitespace and comment wrapping change; preprocessed C++ token streams and all numerical criteria are unchanged. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Recognize checkpoint snapshot identities within the owning family instead of importing the internal provenance collector. Preserve source-bundle and checkpoint matching criteria and compare the local identity against the existing behavior. Keep all direct-staging assertions in the existing bundle-writer test module to preserve the closed shared-tree contract. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Signed-off-by: chaofengw <chaofengw@nvidia.com>
Select one of eight precomposed BF16 video/audio output-head banks in a strongly typed TensorRT graph, retaining explicit operand and output rounding around FP32 accumulation. Add a synthetic GPU oracle for all eight selectors, three dynamic row profiles and the trained hidden width. CPU request validation and scope preflight pass; complete student graph, VSA and trained-model qualification remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Bind both dynamic modalities and the PDD selector before inferring output dimensions in the GPU component oracle. Retain shape diagnostics for each case so a binding failure is distinguishable from numerical disagreement. Keep the original graph, 72 cases and BF16 comparison limits unchanged. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Add segment-pure 128-token transport, independent reference-video key budgets and the learned compression boundary. Implement the operation through TVM-FFI with generic and optional Blackwell backends, and compose it with the existing owner-local H3 backbone and eight PDD output heads. CPU regressions pass 157 cases and seven pinned upstream geometry cases. CUDA compilation, trained numerical validation and native student runtime integration remain required; the earlier output-head mismatch is unwaived. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Select the released eight-forward student recipe explicitly, preserving original H3 scheduling and fixed conditioning. Bind native 128-token VSA geometry and the trained head selector for each window. Validate the closed checkpoint contract, native schedules and transport against pinned source math. Add a real TensorRT VSA component oracle; target GPU compilation and trained-model qualification remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Admit the pinned student contract and exhaustive parameter index, rebuild both student partitions, and reuse only explicitly compatible common plans from a verified source bundle. Write native serialized host buffers directly into the bundle to avoid the second plan-sized Python bytes allocation. Preserve the original bytes API and original continuation defaults. Host checks cover partition ownership, metadata, source rejection, short writes and unchanged common sections; trained model and target memory qualification remain pending. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Distinguish the synthetic text segment from the complete Qwen image-token prefix. Preserve the existing workload and numerical criteria; the component case does not qualify a full six-reference request. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The local block-output ITensor overwrote the caller's serialization stream, so a completed TensorRT build tried to invoke ITensor.write(). Keep the block tensor separate from the optional destination to restore both the default bytes API and native host-buffer streaming. Add four real TensorRT deserialization round trips for bytes/streamed output and features/native-timesteps inputs. CPU validation: 56 passed and six GPU cases deselected. Target GPU execution remains pending; no model shapes, precision boundaries or numerical thresholds change. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The output-head marking loop also reused the serialization destination's name. Keep those ITensors separate so the complete student builder passes the actual writer through to native serialization. This was caught during pre-launch review; no DiT build was submitted with the earlier fix. Validation: 78 CPU checks passed, six GPU cases deselected. All three streaming builder entry points retain their output parameter. Model math, shapes, precision and numerical thresholds remain unchanged. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Allow an explicit denoiser_workspace_bytes budget while retaining the 8-GiB default and the separate AdaLN budget. Record both limits in the build receipt. The full VSA transport graph can require a tactic larger than the previous limit; selecting more scratch does not change its input profiles, weights, precision, sampling or correctness gates. Validation: 96 CPU checks passed and six GPU cases deselected. Coverage includes default and explicit per-plan budgets, invalid values rejected before weight loading, and unchanged student/runtime contracts. Full GPU bundle construction remains pending. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The native Ref2VA pipeline checked every recipe against the original H3 49/98-forward counts after denoising. Valid OmniRef PDD outputs therefore failed before video and audio decoding. Validate the existing recipe contract: original H3 requires 49/98 forwards, and OmniRef PDD requires 8/16. Reject unknown recipes, unsupported window profiles, and all other counts. Preserve the denoising schedule and model precision, shapes, weights, and numerical gates. Add CPU regressions for both recipes and window profiles, including wrong counts and invalid configuration. The focused test reproduces the stale guard failure before this fix; the full pipeline host regression passes after it with both residency modes. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Replay saved operands through the unchanged native FFI function and retain routing, compression, and fine-attention observations. Compare the original gated result against its original reference and numeric limits. A separate zero-gate call exposes fine attention for diagnosis only. It cannot qualify the original failing case or the trained model. Preserve all original input and reference files. Validation: Ruff and Python compilation passed. Real GPU localization remains pending. No production graph or kernel changes are introduced. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The optimized 128-token attention discarded the softmax probability residual before PV. Retain a second BF16 limb in the unused half of the QK tensor-memory tile and accumulate both products into the existing FP32 output. Wait for both limbs before the PV handoff; keep the 64-token path unchanged. A family-owned CPU experiment on saved operands isolates probability storage. Its sampled result supports the change but does not qualify CUDA numerical agreement, performance, trained-model quality or the application. Preserve the existing reference and tolerances for GPU validation. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The released cubic exponential approximation can move BF16 attention across a rounding boundary, which a cancelling gated sum exposes. Use the existing hardware exponential path for the optimized 128-token operation. Preserve the 64-token path, probability residual, workspace and BF16 I/O boundaries. Add a family-owned CPU counterfactual on saved boundaries. It reproduces both fused outputs bitwise and attributes the remaining discrepancies to fine-attention rounding. The cubic simulation explains the observed error pattern; it is diagnostic evidence, not GPU or trained-model qualification. Keep the reference, operands, seeds and numeric limits unchanged. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Accumulate a third BF16 probability limb without increasing the workspace, TMEM or shared-memory allocation. Reuse the epilogue buffer before final PV, wait for the previous TMA read, and hand it back after the MMA completion. Keep the hardware exponential and the original BF16 I/O boundaries. Extend the family CPU diagnostic to project the remaining cancelling queries. Allow the GPU oracle to collect all numeric results before exiting nonzero; its default remains fail-fast and every original comparison still must pass. Reference, comparison, case/seed data and tolerances are unchanged. CUDA numerics, synchronization and performance still require target validation. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The unchanged 56-head component profile includes 708 physical tiles and declares 285624192 bytes of BYOK scratch, exceeding the historical 256 MiB builder pool. Size the oracle builder pool from the declared operation bound while retaining its previous minimum. Keep every operand, reference, case, seed, comparison and tolerance unchanged. This fixes a build-resource error and does not resolve existing numerical failures. The 22 family VSA CPU tests pass. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Add an offline diagnostic for immutable saved failing coordinates. Compare FP64 attention with approximate FP32 scaling and softmax operation orders, retaining direct nearest-even BF16 rounding across FP32 midpoints. Keep native fine values explicitly conditional until directly recorded. The diagnostic does not replace the GPU oracle or change inputs, masks, precision boundaries or tolerances. All 29 focused VSA and rounding CPU tests pass. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Record call geometry and host entry/enqueue boundaries only when the explicit trace environment switch is enabled. Preserve all device computations, original asynchronous behavior and correctness gates. Document that enqueues and optional launch-blocking diagnostic times are not benchmark evidence. Validation: all 29 existing VSA layout, transport and rounding-observation CPU checks pass. CUDA compilation, device-instruction comparison and bounded native failure localization remain separate checks. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Keep the third probability limb in dedicated shared tiles rather than borrowing the output epilogue buffers and waiting on their TMA lifetime. Reassign two KV ring stages to the tiles within the existing shared-memory reservation; retain all three PV products and the external scratch contract. Include absolute host trace timestamps to distinguish a stalled call from setup time. CPU layout and rounding contracts pass; GPU output parity and full-request progress remain to be verified. Signed-off-by: chaofengw <chaofengw@nvidia.com>
A one-slot KV ring cannot prefill both K tiles before Q: the producer waits for MMA to release the first K slot while MMA is waiting for Q. Prefill Q first when the ring cannot hold the initial K loads. Keep the four-slot 64-token order, probability limbs and shared-memory reservation unchanged. CPU layout and rounding contracts pass. The saved-output preservation and original full-request stall checks remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Replace generic online attention with separately scaled FP32 Q/K, explicit masked softmax and FP32 PV inside the owning TVM-FFI binding. Complete compression first and reuse its dead scratch while retaining routing indices, counts and compressed output. Keep optimized Blackwell arithmetic available and reject old generic bundles with insufficient scratch. The existing 56-head large workspace sizes stay unchanged. Host layout checks and 32 focused CPU tests pass; integrated GPU and trained-model qualification remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Singleton SGEMM changes the PV accumulation order on the complete saved interleaved case. Use two independent batched products while retaining one head of residency: dead Q holds one output, the fine tile the other, and the completed key mask holds device pointers. Keep every arena size unchanged and assert output/input/pointer-table separation in the host workspace checks. All 32 focused CPU tests pass; complete integrated GPU gates remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Use the existing FP32 warp and block reductions with explicit division for compression probabilities. Valid INT32 tile sizes directly mask empty keys, retaining the external workspace and BF16 boundaries. A complete saved-output diagnostic isolated the sixteen remaining large-case failures to compression rounding after the old reduction. Keep fine attention and the runtime ABI unchanged. Updated complete-case GPU qualification remains pending. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Keep the compressed output at the front and routing indices at the aligned tail of caller-provided scratch. Fit up to 32 independent original query tiles between them while retaining one head of FP32 K/V, separate regional masks, and disjoint QK/PV destinations. Reuse dead PV output and completed masks for device pointer tables. Preserve the duplicate PV reduction when only one query is active, and leave the external workspace contract and BF16 boundaries unchanged. CPU lifetime and capacity checks pass; complete GPU numeric and performance evidence remain required. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Load H3 plans from validated bundle sections instead of retaining serialized plan vectors alongside TensorRT deserialization. Keep plan selection and file identity checks inside the family. Add an optional backend reader contract without changing the existing IBackend vtable. TensorRT reads the original plan bytes through IStreamReaderV2 with a bounded pinned transfer buffer, caller-stream synchronization and engine-owned reader lifetime. Unsupported backends retain the buffered path; failed streamed loads propagate without retrying through it. Cover section bounds and mutations, large sparse inputs under a memory limit, async transfer failure lifetimes, legacy fallback, and deferred cross-DSO option forwarding with CPU tests. Real-engine memory and output parity remain to be qualified on the target TensorRT stack. Signed-off-by: chaofengw <chaofengw@nvidia.com>
A multipart /v1/videos request that uploads input_reference images now runs a references_text_to_audio_video bundle. The native worker passes the images to the Task as RGB references and writes the frames and a 16-bit PCM WAV; the control plane packages the clip with its audio as AAC. The seed and continuation_prompt form fields map to the Task config. trtmc-server gains --byok-library, --byok-function and --byok-name so a bundle that needs a bring-your-own kernel, such as the H3 OmniRef VSA kernel, loads in the persistent worker. Checked with CPU tests and one FastH3 Omni 8-step request on a GB300: three references, 226 frames at 768x1344 and 24 fps with stereo audio. Signed-off-by: chaofengw <chaofengw@nvidia.com>
`python -m tensorrt_model_connect minimax_h3 build-omniref -o OUT --scratch DIR --bridge libtrtmc_byok_tvm_ffi.so --kernel-library libtrtmc_minimax_h3_omniref_vsa.so` runs the explicit experimental FastH3 OmniRef 8-step build from the command line: the original MiniMax-H3 two-window six-portrait bundle first (kept in the scratch directory and reused on the next run), then the student bundle that rebuilds the AdaLN and denoiser plans and reuses the other six. The VSA kernel is registered through the TVM-FFI bridge before the student's plans are built, and the DiT gets a 24 GiB tactic workspace by default (--denoiser-workspace-gib), the limit the released FastH3 bundle's reuse receipt records; with the 8 GiB default TensorRT finds no implementation for the VSA transport fusion. The command drops the page cache of the 128 GB source bundle after hashing it, because on coherent-memory systems such as GB300 that cache occupies the GPU's NUMA node and starves the engine build. Checked on a GB300: both bundles built (about 6 minutes each) and the student bundle rendered a three-reference clip. Applications can then build the bundle through the public family CLI instead of importing family modules. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Keep serialized-input contracts in the existing bundle and backend headers, and the TensorRT reader in the backend module header. Compile the existing bundle and module test files in separate CPU modes to preserve every reader assertion and CTest case without adding shared files. The unchanged source-quality suite passes all 307 tests. The six runtime tests and CPU stream-transfer ASan/UBSan checks pass with the consolidated layout. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Separate pointer classification and bounded device copies from the serialized-input callback. Split CPU transfer and cross-DSO scenarios into named test functions while preserving their input values, assertions, ordering, and failure behavior. The unchanged core complexity gate now reports a maximum CCN of 10. All six runtime CPU cases still pass; no source-quality gate or numerical criterion changes. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Apply clang-format 22.1.8, the version the source-quality gate pins, to the VSA kernels and the workspace test, and give that test the standard native SPDX block. No code changes. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Every family builder config sets its optimization level explicitly. The standalone output-head projection plan used TensorRT's default, so pin that default (3) instead of changing the plans it builds. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Family code must not hash sources, plans or bundle data. The continuation and OmniRef builds checked a caller-supplied SHA-256 of the whole source bundle and of every reused section, and runtime.json carried digests of the component configs. Reuse now relies on what identifies a compatible source: the bundle header and complete section layout, runtime.json equal to the expected original profile, the same pinned checkpoint and BF16 build settings in its provenance, and a byte-equal tokenizer. The source file must stay the same file (device, inode, size and mtime) while plans are copied. Builds no longer read the whole source bundle up front. runtime.json drops config_sha256 and the runtime stops requiring it; older bundles still load. The reuse receipt lists the reused and rebuilt sections. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The oracle, localize and replay scripts under tests/ were tools for chasing numerical mismatches against local caches. They pinned inputs and upstream sources by SHA-256, wrote evidence reports and one assumed a host path. No other family keeps such tools, and family code must not hash data. Remove them, the tests that only exercised them, and the factory probe only they used. The remaining tests keep their checks without digests: the trained video decoder compares cold/warm and cross-preset outputs byte for byte and always generates its upstream reference, the trained audio decoder and native window tests rely on the pinned checkpoint revision and supplied upstream source. Signed-off-by: chaofengw <chaofengw@nvidia.com>
The OmniRef VSA binding read TRTMC_MINIMAX_H3_VSA_BACKEND to force a generic or Blackwell route and TRTMC_MINIMAX_H3_VSA_TRACE to print host timing for every call. Both are environment side channels in production code. The binding now always takes the optimized route when the library was compiled with the Blackwell cubins for the active GPU and the generic route otherwise, which is what the default "auto" did. The trace and the headers only it used are gone. Signed-off-by: chaofengw <chaofengw@nvidia.com>
Rewrite the family README around what a user needs: the build-omniref command and its disk and memory needs, the Python entry point, presets, reference capacity, bundle layout, the request contract, continuation, the OmniRef student, plan reuse and the tests. Drop measurements of individual builds and requests, experiment history and the commands of the removed investigation scripts. Keep the known failing trained encoder comparison as an open gap. Signed-off-by: chaofengw <chaofengw@nvidia.com>
apps/short_drama is a small web app that runs every model step through trtmc-server on the user's own GPU: a language model plans the cast, places and shot lists from the novel, Qwen-Image draws reference stills to approve, MiniMax H3 (FastH3 OmniRef) films each shot with sound from the approved stills, and Whisper times the subtitles before FFmpeg assembles 1080x1920 episodes. `python -m trtmc_short_drama up` picks a tier by GPU memory, builds missing bundles with the TRTMC builder (H3 through the family recipe) and loads only the bundles each step needs. The flow (steps, models, parameters) is versioned JSON edited in the app, and a step can be added as a plugin file; dialogue_polish is the example. Planning can use an optional OpenAI-compatible API whose key stays in a mode-600 file. The bundled sample is the public-domain text of 《阿Q正传》 by Lu Xun. Signed-off-by: chaofengw <chaofengw@nvidia.com>
…ds it trtmc-server reads a bundle once into GPU memory. On GB300 the GPU's memory is a NUMA node of the host, and the file cache of a 100 GB bundle can land there as memory no process owns: a later stage's model then fails to load. The engine now advises the kernel to drop the cached pages of the bundles it starts with, before the start and again once the server is ready. On a GB300, the cache an earlier run of the Qwen3.6-27B bundle had left on the GPU's node fell from 52 GB to 0.4 GB once the model had loaded; all GPU memory in use then belonged to the server. Signed-off-by: chaofengw <chaofengw@nvidia.com>
…idea The app now leads a project through its four stages and keeps a person in charge of every step that costs GPU time. - Each stage (plan, references, shots, episodes) shows what is done and what to do next. - Plan checks run on every change: people the chapters name often but nobody plays, someone acting in a shot without being in it, a speaker outside the shot, a line too long for its shot, unknown ids, shots longer than one clip, episodes over their limit. Each line is marked as quoted from the novel or adapted. - Three actions run with the plan step's language model: review (notes per shot on missing events, continuity and over-full shots), revise (rewrite one shot, character, location or prop from a note and keep the rest of the plan) and story (write a short story from a one-line idea, so a project can start without a novel). A plugin step becomes such an action with model_from. - A re-plan, revision, save or restore first keeps the plan it replaces; earlier versions can be restored. - Only characters, locations and props that appear in a shot get a still, and each still lists its shots. - Every take keeps the prompt and stills it was rendered from. A redrawn still or a changed prompt marks the take outdated, and only outdated shots need rendering again. - Shots start with one sample. A batch first says how much GPU time it takes, from the times measured per still and take on this machine. A strip shows every shot of the episode. - A cast member who is heard but not seen, as on a phone, keeps the line: the video prompt gives it as an off-screen voice with that character's voice, instead of moving it to someone in the shot. On a GB300 with Qwen3.6-27B, the review of the bundled four-episode plan took 178 s and found, among others, a line given to the wrong speaker; revising one shot took 12 s. Signed-off-by: chaofengw <chaofengw@nvidia.com>
`up` no longer builds the 27B language model unless asked with `--llm local`. Planning, stories, reviews and revisions use the chat API chosen in Settings, which presets two free tiers (the NVIDIA API catalog and OpenRouter) and still takes any OpenAI-compatible URL. A chat API that answers 429 or 5xx is asked again three times, honoring Retry-After, and a failure carries the API's own reason with what to check. Without any language model the plan stage points to Settings instead of failing on the first step. Signed-off-by: chaofengw <chaofengw@nvidia.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueComment |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background
TensorRT Model Connect can serve every model a short-drama pipeline needs from one GPU through
trtmc-server: image generation, reference-to-video with audio, and speech recognition. This PR addsapps/short_drama, an end-to-end app that turns a Chinese novel or a one-line idea into vertical 9:16 episodes with sound and subtitles on the user's own GPU.It depends on #1931, which adds MiniMax-H3 reference-to-video and the server's kernel registration and reference video support. Until #1931 merges, this PR also shows that PR's commits; the app itself is the last four commits.
Exit Criteria
python -m trtmc_short_drama uppicks the GPU and its tier, builds missing bundles (or takes--bundle NAME=PATH), startstrtmc-serverand serves the web app.--llm localbuilds and servesQwen/Qwen3.6-27Binstead.trtmc-serverhas no speech endpoint yet; hosted multi-user deployment.Implementation
apps/short_drama/trtmc_short_drama:cli.py:up,--dry-run,--llm api|local;catalog.py: tiers and models;engine.py: thetrtmc-serverprocess and its calls, with each bundle's page cache dropped once loaded;flow.py: versioned flows and plugin steps;planning.py,prompts.py: the plan step (novel to chapter notes, cast, places, episodes and shot lists) and the prompts for each model;review.py,assist.py: rule checks on every edit, stage progress, and model actions outside the stages (review, one-item revision, a story from an idea);media.py,editing.py,video.py: reference stills, shots, subtitle checks and FFmpeg assembly;jobs.py,store.py: one background worker that keeps the GPU on one task at a time, and projects on disk;llm.py: an OpenAI-compatible client that retries 429/5xx withRetry-Afterand reports the API's reason;web.pyandstatic/: a FastAPI app and a single-page UI.samples/ah_q_zheng_zhuan.txt: 《阿Q正传》 by Lu Xun, public domain, recorded inASSET_LICENSES.md.pyproject.toml: addsapps/short_drama/teststo the pytest paths.Change categories
Validation
Commands and Results
CUDA_VISIBLE_DEVICES= python -m pytest apps/short_drama/testson this head: 68 passed.ruff check --config ruff.tomlon every changed Python file andgit diff --check: passed.Hardware, Environment, and Revisions
Head based on
mainat2c2256cc5plus #1931. One NVIDIA GB300 in an aarch64 Ubuntu 24.04 container with TensorRT 11.2.0.113 and CUDA 13.0. Models:Qwen/Qwen-Image,FastVideo/FastVideo-FastH3-Omni-8-Step-V1withMiniMaxAI/MiniMax-H3, andopenai/whisper-large-v3-turbo;Qwen/Qwen3.6-27Bwith--llm local.Not Run / Remaining Gaps
Contributor Self-Review
Notes For Future Readers
apps/short_drama,ASSET_LICENSES.mdandpyproject.toml.ASSET_LICENSES.mdis a shared file for CI impact, so this PR's Community CI runs the shared smoke families until ci(impact): classify ASSET_LICENSES.md as documentation #1899 lands.apps/short_drama/README.mdcovers requirements, the run options, the language-model presets, use, customizing flows and plugins, and tiers.Risk level
A new, self-contained app directory. Outside it, only the license list and the pytest paths change.