Skip to content
ModelListedExternal
Browse files

Lance 3B Video BF16

> ๐Ÿ“‚ Part of the Lance MLX collection on mlx-community.

KindText modelBase modelbytedance-research/LanceVersionBgrade

Model source

Kind
Text model
File size
1.25โ€“12.0 GB
Base model
bytedance-research/Lance
Version
vRevision b70ba0a
Updated
Oct 31, 2026
Downloads
641
Source
Hugging Face

Source description

๐Ÿ“‚ Part of the Lance MLX collection on mlx-community.

Lance-3B-Video-bf16 (MLX, video specialist) โ€” ๐Ÿšง ALPHA

MLX port of ByteDance Intelligent Creation Lab's Lance โ€” the video-specialist Lance_3B_Video checkpoint, converted to bf16 for Apple Silicon. ~6.44 B LLM parameters + 669 M Qwen2.5-VL ViT bundled, with the 126,976-entry latent_pos_embed table needed for video-scale latent grids.

โš ๏ธ This is an alpha release. t2v is production-quality through 7682ร—25f (n_lat=16,128) after the Phase 5m CFG-renorm fix (v0.5.2), verified across two prompts (panda surfing, bus + Big Ben). At n_lat โ‰ฅ ~30k (7682ร—49f, 480ร—848ร—121f) Phase 5m partially closes the original "pure noise" failure to a milder "structured-but-degraded with mesh artifacts" failure โ€” the model attempts the scene but the VAE outputs colored geometric tiles overlaid on it. See Status below.

Lance is ByteDance's 3B-active unified multimodal model (paper, code, HF original). This is not Lance/LanceDB, the columnar data format.

Status

๐ŸŸก Alpha โ€” t2v is production-quality through 7682ร—25f (n_lat=16,128) after the Phase 5m fix; n_lat โ‰ฅ ~30k produces structured-but-degraded output with mesh artifacts (improvement over pre-fix pure noise, but not usable); understanding pipelines unvalidated.

CapabilityStatusNotes
t2v at 256ร—256 ร— โ‰ค17 frames๐ŸŸข ProductionRed panda surfing demo shows real temporal motion. ~33 s/clip on M5 Max.
t2v at 512ร—512 ร— 17 frames (n_lat โ‰ค 5,120)๐ŸŸข ProductionPainterly aesthetic (this checkpoint's training-time style).
t2v at 640ร—640 ร— 17 frames (n_lat โ‰ค 8,000)๐ŸŸข ProductionNew scale validated under Phase 5m.
t2v at 768ร—768 ร— โ‰ค13 frames (n_lat โ‰ค 9,216)๐ŸŸข ProductionPainterly; legacy baseline.
t2v at 768ร—768 ร— 17 frames (n_lat = 11,520)๐ŸŸข Production (Phase 5m)CFG-renorm fix in v0.5.2 โ€” closes the silent quality regression. Pass cfg_renorm_type="global" to restore legacy default.
t2v at 768ร—768 ร— 25 frames (n_lat = 16,128)๐ŸŸข Production (Phase 5m+)Verified post-fix with clean diagnostic prompt (bus + Big Ben). Quality equivalent-or-better than 17f; the n_lat โ†’ quality relationship is stochastic (seed ร— scale), not a monotonic degradation curve.
t2v at 768ร—768 ร— 33-41 frames (n_lat = 21kโ€“26k)โ“ Untested with Phase 5mGap in the empirical sweep. Likely in-envelope based on 25f result but unverified.
t2v at 768ร—768 ร— 49 frames (n_lat = 29,952)โŒ Structured-but-degradedManual verification 2026-05-23: Phase 5m partially closes the pre-fix pure-noise collapse to a milder failure โ€” the model attempts the scene (Big Ben silhouette barely visible) but the VAE produces colored geometric mesh artifacts overlaid throughout. Numerical signature: final std=0.623 vs ~0.88 for clean runs โ€” channel renorm clamps too aggressively at late timesteps once n_lat reaches 30k, pushing latents outside the VAE's trained distribution. ~78 min wall-clock + 84.6 GB peak memory. Tracked as issue #1.
t2v at Lance reference (480ร—848 ร— 121f, n_lat โ‰ˆ 49 k)โŒ Same regime as aboveUntested directly at this exact dimension but expected to fall in the same degraded-mesh-artifact regime as 7682ร—49f.
x2t_video (video VQA / captioning)๐ŸŸก Implemented, not validatedPipeline lands in lance-mlx but hasn't been compared against Phase 0 oracle.
video_edit (instruction-based)๐ŸŸก Implemented, not validatedDirect fusion of t2v + image_edit. Will only be as good as t2v at the chosen scale.

For production-quality image tasks (t2i, image_edit, x2t_image), use the sibling repo mlx-community/Lance-3B-bf16 โ€” it's fully validated.

Hardware envelope (memory_mode, 2026-06-02)

The lance-mlx source repo's memory_mode knob (auto / parallel / relay) brings bf16 video generation within reach of 8โ€“16 GB Apple Silicon Macs:

RAMModet2v / video_editNotes
8โ€“16 GBrelay (auto-resolved)โœ… Long t2v clips fit (e.g. 2562ร—61f in ~8.7 GB)Single-shot per pipeline load โ€” re-prefill reloads the UND tower. Tiled spatial+temporal VAE decode keeps the decode peak roughly flat in frame count.
24 GB+parallel (auto-resolved)โœ… Reusable pipeline across callsAll components resident; classic behavior.

relay produces byte-identical output to parallel (frame MD5-verified on real Lance-3B-Video-bf16) โ€” it sheds the UND tower after prefill and frees the GEN tower before VAE decode, so peak memory โ‰ˆ heaviest single phase rather than the sum of all three. The tiled VAE decode (tile_vae=True, plus vae_temporal_tile for long clips) bounds the decode transient, so long t2v becomes loop-bound rather than decode-bound. Default auto resolves by mx.device_info()'s recommended working-set size with the split at ~18 GiB. The same envelope applies to the sibling mlx-community/Lance-3B-bf16 for image tasks.

Within the n_lat โ‰ค 16,128 production envelope above, relay fits every validated configuration in 16 GB; the larger-than-envelope configs (n_lat โ‰ฅ ~30k) are still gated by the structured-mesh-artifact issue documented below, not by memory.

Lossless streaming VAE decode (lossless_decode, 2026-06-05)

generate(..., lossless_decode=True) (default since 2026-06-05) uses a bit-identical streaming VAE decode that's flat in frame count via temporal causal-cache streaming (Wan2.2 VAE is causal in time), composed with spatial halo-tile + crop. 50-case bit-identity test in lance-mlx with a negative control verifies the guarantee (max|ฮ”|=0 vs whole-sequence dec(z)). On real Lance-3B-Video-bf16 with ri_phys measurement (true OS-committed footprint, supersedes the older mx.get_peak_memory() quotes which under-report ~2ร—):

Configwhole dec(z)lossless streaminglossy blend16 GB
2562 ร— 49f12.18 GB7.99 GBโ€”โœ… lossless (lighter + exact)
2562 ร— 121f15.41 GB8.05 GB12.47 GBโœ… lossless (lighter + exact)
5122 ร— 61fOOM12.64 GBOOM (>20 GB)โœ… lossless (only path that fits)
7682 video (โ‰ฅ13f)OOM>~21 GB (lower bound)13.2โ€“16.3 GB (+~3 GB swap)lossy on 16 GB (lossless needs 24 GB+, predicted)

The temporal streaming win widens with clip length โ€” at 2562 the lossless decode goes from 7.99 GB at 49f to 8.05 GB at 121f, essentially flat. Only 7682 video needs the lossy fallback on 16 GB: pass lossless_decode=False to keep the trapezoidal-blend tiling (~1.5โ€“4.8 / 255 off the reference). For bit-identical 7682 video, a 24 GB+ Mac is needed (predicted from the >~21 GB lower bound, not directly measured).

Full envelope, methodology, and raw numbers in the source repo's LIMITS.md.

There is no AWQ-INT4 quantized variant for video โ€” mlx-community/Lance-3B-AWQ-INT4 ships for x2t_image VQA only and is not applicable to t2v / video_edit / x2t_video. For video on small Macs, bf16 + memory_mode=relay (+ lossless_decode=False for 7682 video) is the path.

Why a separate "Video" checkpoint?

ByteDance ships two variants of Lance that differ in fine-tuning (NOT just latent_pos_embed size):

  • Lance_3B โ€” image specialist. Crystal-clear photorealistic t2i.
  • Lance_3B_Video โ€” video specialist. Same architecture, further fine-tuned on video data. Native aesthetic is painterly (verified by per-tensor diff: _moe_gen QK-norms differ by 0.5โ€“0.85 in 6+ layers; lm_head and embed_tokens are byte-identical).

This checkpoint also bundles the Qwen2.5-VL ViT for video-understanding tasks, with the larger 126,976-entry latent_pos_embed table that addresses video-resolution token grids.

Quickstart

Install from the lance-mlx source repo:

git clone https://github.com/xocialize/lance-mlx
cd lance-mlx && uv sync

Download this checkpoint:

from huggingface_hub import snapshot_download
weights = snapshot_download("mlx-community/Lance-3B-Video-bf16")

Text-to-video (recommended scale)

from lance_mlx.pipeline.t2v import TextToVideoPipeline

pipe = TextToVideoPipeline.from_pretrained(
    lance_weights_dir=weights,
    vae_safetensors=f"{weights}/vae.safetensors",
)
frames = pipe.generate(
    "A red panda surfing on a sunny wave.",
    num_frames=16, height=256, width=256,
    num_steps=30, cfg_scale=4.0, seed=42,
)
# frames is np.ndarray of shape (T_decoded, H, W, 3) uint8

Encode to MP4 with imageio:

import imageio
with imageio.get_writer("out.mp4", fps=12, codec="libx264") as writer:
    for f in frames:
        writer.append_data(f)

Video understanding (alpha)

from lance_mlx.pipeline.understanding import UnderstandingPipeline

pipe = UnderstandingPipeline.from_pretrained(
    lance_weights_dir=weights,
    vit_safetensors=f"{weights}/vit.safetensors",
)
answer = pipe.generate_video(
    video="my_video.mp4",
    question="Describe what happens in this video.",
    num_sample_frames=16, target_h=224, target_w=224,
    max_new_tokens=256, prompt_style="lance",
)
print(answer)

โš ๏ธ Unvalidated against Phase 0 oracle. Treat answers as exploratory.

Phase 5m fix โ€” silent quality regression at n_lat โ‰ˆ 11,520 RESOLVED (v0.5.2)

The "global" CFG-renorm cap was computing a single scalar L2 over the entire velocity tensor. At higher n_lat (โ‰ˆ 2ร— the production baseline) the L2 sum spans roughly twice as many elements, so the same cap silently over-suppressed high-frequency detail โ€” composition + identity correct, but textures and sky gradients degraded.

Fix (default since v0.5.2): cfg_renorm_type="channel" computes per-channel L2 separately, so pathological channels clamp without dragging the aggregate signal down. Detail returns at high n_lat without regressing small scales.

Evidence (7682ร—17f, seed=43, cfg=4.0): "global" final std 0.907 (over-suppressed), "none" final std 1.112 (uncapped + clean), "channel" final std 0.900 (capped per-channel + visually matches "none"). V0 safety A/B at 7682ร—13f confirms no small-scale regression.

Pass cfg_renorm_type="global" to restore the legacy default.

Known issue: structured-but-degraded mesh artifacts at n_lat โ‰ฅ ~30k

Lance_3B_Video t2v pre-Phase-5m collapsed to pure random noise at very-high latent counts. Post-Phase-5m the failure mode is milder but still unusable: the model attempts the scene (recognizable silhouettes barely visible) but the VAE outputs colored geometric mesh tiles overlaid throughout.

Bisection on Phase 5m defaults (cfg_renorm_type="channel"):

T_frames   n_lat   result
       1   2,304   coherent  (same as t2i)
       5   4,608   coherent
       9   6,912   coherent (painterly)
      13   9,216   coherent (painterly, mild temporal drift)
      17  11,520   coherent โ† Phase 5m fix restored detail
      25  16,128   coherent โ† Phase 5m+ verified across two prompts
      33  21,120   untested
      41  26,304   untested
      49  29,952   structured-but-degraded โ† manual verification...

Sources

1 source
Hugging FacePrimaryVersion b70ba0a53c14eef573570fe65b31e295bd8216af
huggingface.co/mlx-community/Lance-3B-Video-bf16/tree/b70ba0a53c14eef573570fe65b31e295bd8216af

Verified Oct 31

Download files

Model artifacts

3 artifacts

model.safetensors

safetensors ยท MIXED (unverified) ยท 12.0 GB ยท SHA-256 2d9cacd1879cโ€ฆ8ace ยท Hugging Face

Download file

vae.safetensors

safetensors ยท BF16 (unverified) ยท 1.31 GB ยท SHA-256 707e20bb83bdโ€ฆ6807 ยท Hugging Face

Download file

vit.safetensors

safetensors ยท 1.25 GB ยท SHA-256 4abfe7f4b7a2โ€ฆ21ee ยท Hugging Face

Download file

Source excerpts

3 excerpts

--- license: apache-2.0 language: - en - zh library_name: mlx pipeline_tag: text-to-video tags: - mlx - apple-silicon - lance - bytedance - multimodal - text-to-video - video-understanding - qwen2.5-vl - alpha base_model: bytedance-research/Lance --- > ๐Ÿ“‚ Part of the **[Lance MLX collection](https://huggingface.co/collections/mlx-community/lance-mlx-6a0f3cd5648a74f8283fc8a4)** on mlx-community. # Lance-3B-Video-bf16 (MLX, video specialist) โ€” ๐Ÿšง ALPHA MLX port of **ByteDance Intelligent Creation Lab's Lance** โ€” the video-specialist `Lance_3B_Video` checkpoint, converted to bf16 for Apple Silicon. ~6.44 B LLM parameters + 669 M Qwen2.5-VL ViT bundled, with the 126,976-entry `latent_pos_embed` table needed for video-scale latent grids. > โš ๏ธ **This is an alpha release.** t2v is production-quality through 768ยฒร—25f (n_lat=16,128) after the Phase 5m CFG-renorm fix (v0.5.2), verified across two prompts (panda surfing, bus + Big Ben). At n_lat โ‰ฅ ~30k (768ยฒร—49f, 480ร—848ร—121f) Phase 5m partially closes the original "pure noise" failure to a milder "structured-but-degraded with mesh artifacts" failure โ€” the model attempts the scene but the VAE outputs colored geometric tiles overlaid on it. See [Status](#status) below. > **Lance** is ByteDance's 3B-active unified multimodal model ([paper](https://arxiv.org/abs/2605.18678), [code](https://github.com/bytedance/Lance), [HF original](https://huggingface.co/bytedance-research/Lance)). This is **not** [Lance/LanceDB](https://github.com/lancedb/lance), the columnar data format. ## Status ๐ŸŸก **Alpha โ€” t2v is production-quality through 768ยฒร—25f (n_lat=16,128) after the Phase 5m fix; n_lat โ‰ฅ ~30k produces structured-but-degraded output with mesh artifacts (improvement over pre-fix pure noise, but not usable); understanding pipelines unvalidated.** | Capability | Status | Notes | |---|---|---| | t2v at 256ร—256 ร— โ‰ค17 frames | ๐ŸŸข Production | Red panda surfing demo shows real temporal motion. ~33 s/clip on M5 Max. | | t2v at 512ร—512 ร— 17 frames (n_lat โ‰ค 5,120) | ๐ŸŸข Production | Painterly aesthetic (this checkpoint's training-time style). | | t2v at 640ร—640 ร— 17 frames (n_lat โ‰ค 8,000) | ๐ŸŸข Production | New scale validated under Phase 5m. | | t2v at 768ร—768 ร— โ‰ค13 frames (n_lat โ‰ค 9,216) | ๐ŸŸข Production | Painterly; legacy baseline. | | **t2v at 768ร—768 ร— 17 frames (n_lat = 11,520)** | **๐ŸŸข Production (Phase 5m)** | **CFG-ren...

Source context: 641 downloads ยท 10 likes ยท Pipeline text-to-video ยท Library mlx ยท Repo mlx-community/Lance-3B-Video-bf16

Source context: 436 downloads ยท 10 likes ยท Pipeline text-to-video ยท Library mlx ยท Repo mlx-community/Lance-3B-Video-bf16