Image-Text-to-Text
Transformers
Safetensors
modilify_mk1
text-generation
diffusion
multimodal
mixture-of-experts
trust-remote-code
conversational
custom_code
Instructions to use modilify/Modilify-Mk1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use modilify/Modilify-Mk1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="modilify/Modilify-Mk1", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("modilify/Modilify-Mk1", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use modilify/Modilify-Mk1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "modilify/Modilify-Mk1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "modilify/Modilify-Mk1", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/modilify/Modilify-Mk1
- SGLang
How to use modilify/Modilify-Mk1 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "modilify/Modilify-Mk1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "modilify/Modilify-Mk1", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "modilify/Modilify-Mk1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "modilify/Modilify-Mk1", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use modilify/Modilify-Mk1 with Docker Model Runner:
docker model run hf.co/modilify/Modilify-Mk1
| license: other | |
| license_name: modilify-open-model-license-1.0 | |
| license_link: LICENSE | |
| library_name: transformers | |
| pipeline_tag: image-text-to-text | |
| tags: | |
| - diffusion | |
| - multimodal | |
| - image-text-to-text | |
| - mixture-of-experts | |
| - trust-remote-code | |
|  | |
| # Modilify Mk1 | |
| A 26B-A5B multimodal block-diffusion model that thinks in latent space, commits only when it is ready, and was trained on a single Apple silicon machine in less than a day. | |
| Modilify Mk1 is not another long-context decoder with a bigger reasoning budget. It is a Transformer-in-Transformer: the heavy DiffusionGemma trunk still sees text, images, and video, while a recurrent latent deliberation stack compresses the entire chain of thought into a compact hidden trajectory. Visible tokens are no longer the only place intelligence can live. The exclusive excess-entropy commit formula decides, every denoise, how many tokens the model is allowed to lock in. Easy problems finish fast. Hard problems keep deliberating. | |
| This official release is the first public Mk1 checkpoint. It is materially more stable than [Modilify Mk1 Preview](https://huggingface.co/modilify/Modilify-Mk1-preview), restores the full vision tower, and ships default inference settings that run about **6× faster** than autoregressive models. | |
| ## Breakthroughs | |
| | | | | |
| | --- | --- | | |
| | **One Mac. One day.** | Trained on a **single Apple silicon** machine in **less than 24 hours**. | | |
| | **Seven million tokens.** | The adaptation used about **7 million training tokens**, not a web-scale second pretrain. | | |
| | **Intelligence density** | Far more capability per activated parameter, and far more capability per training token, than a conventional post-train at this size. | | |
| | **Transformer-in-Transformer** | A latent Transformer sits inside every heavy denoise and writes a recurrent memory that survives canvas commits. | | |
| | **Latent CoT compression** | Chain-of-thought is compressed into token latents and 64 memory slots instead of being dumped into visible tokens. | | |
| | **Exclusive commit formula** | Excess-entropy fusion, `p²` when entropy is honest, a hard prefix-risk budget, and a stagnation jump. Not a confidence threshold. | | |
| | **6× default throughput** | Default settings target speed. Preview's quality-oriented knobs are still available when you want them. | | |
| | **Adjustable inference speed** | Move `commit_failure_budget`, `denoise_temperature`, and the ponder / jump limits. Same weights, different operating point. | | |
| | **More stable than Preview** | Cleaner commit geometry, stronger latent addressing, and no leftover adapter surface. | | |
| | **Better agents** | Native thinking-channel control, tool-ready Gemma turns, and a latent scratchpad that does not pollute the user-visible transcript. | | |
| ## Why this is different | |
| Most reasoning models buy intelligence with more visible tokens. That is expensive, leaky, and hard to stop. Mk1 buys it with **latent deliberation**: | |
| 1. Each heavy denoise still runs the 26B-A4B MoE trunk over a 256-token rolling canvas. | |
| 2. A 4-layer latent Transformer reads the noisy canvas, confidence, entropy, and age, then updates per-token latents plus a 64-slot persistent memory. | |
| 3. That compact state is mapped back through the frozen self-conditioning bridge and conditions the next heavy pass. | |
| 4. The exclusive commit formula then locks a variable-length prefix. The memory slots do not shift. The thought continues even after the visible tokens have moved on. | |
| The result is elastic inference. You can spend more heavy-denoise work on a hard agent turn, or commit more tokens per pass and finish sooner when the problem is easy. Throughput is a configuration choice, not a second model. | |
| ## Efficiency | |
| Mk1 is an argument about **intelligence per parameter** and **intelligence per training token**. | |
| The released model activates 4.159B text parameters on a heavy denoise, plus the 570M vision encoder when images or video are present. The latent stack is small. The adaptation that produced this checkpoint ran on **one Apple silicon machine**, finished in **under 24 hours**, and saw about **7 million tokens**. That is not a claim that data does not matter. It is a claim that a better architecture can extract more from each token and each watt. | |
| Default inference is the fast operating point. Compared with the slower Preview evaluation settings (`denoise_temperature=0.4`, `commit_failure_budget=0.05`, `jump_on_no_progress_after=32`), the Mk1 defaults are built for about **6× higher throughput**. Tighten the budget if you want Preview-like caution. Loosen it if you want the model to finish. | |
| ## Model Summary | |
| | | | | |
| | --- | ---: | | |
| | Architecture | Mixture-of-Experts block diffusion + latent Transformer-in-Transformer | | |
| | Total Parameters | 26.139B | | |
| | Activated Parameters | 4.729B, including the vision encoder | | |
| | Text Heavy-Denoise Activated Parameters | 4.159B | | |
| | FLOPs per Heavy Denoise | ~2.12 TFLOPs at batch 1, 256-token canvas, empty KV prefix | | |
| | Layers | 30 | | |
| | Number of Experts | 128 | | |
| | Selected Experts per Token | 8 | | |
| | Number of Shared Experts | 1 | | |
| | Vocabulary Size | 262,144 | | |
| | Context Length | 262,144 tokens | | |
| | Activation Function | GELU, tanh approximation | | |
| | Vision Encoder | Gemma 4 Vision | | |
| | Vision Encoder Parameters | 569.550M | | |
| | Modality | Text, Image, Video | | |
| | Sliding Window | 1024 tokens | | |
| | Canvas Length | 256 | | |
| | Latent Memory | 64 slots × 1,536-d, 4 layers | | |
| | Training tokens | ~7 million | | |
| The heavy-denoise FLOPs estimate counts multiply-adds as two FLOPs and covers decoder, expert, latent deliberation, and attention work only. It excludes the encoder pass, sampling/softmax, and elementwise ops. Batch size scales it roughly linearly: a 256-token prefix raises the estimate to ~2.16 TFLOPs, and a 4,096-token prefix to ~2.38 TFLOPs because some layers use full attention. | |
| ## Benchmark Results | |
| | Benchmark | Modilify Mk1 | DiffusionGemma 26B A4B | Gemma 4 26B A4B | | |
| | --- | ---: | --- | --- | | |
| | MMLU Pro | 86.8 | 77.6 | 82.6 | | |
| Only part of each dataset was evaluated, with one-shot prompting. Treat these values as unstable and non-comparable until the full benchmark release. | |
| ## Getting Started | |
| Transformers 5.14.1 is the minimum supported version. | |
| ```shell | |
| pip install -U transformers torch accelerate | |
| ``` | |
| ### Text generation | |
| ```python | |
| import torch | |
| from transformers import AutoModelForMultimodalLM, AutoProcessor | |
| model_id = "modilify/Modilify-Mk1" | |
| processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) | |
| model = AutoModelForMultimodalLM.from_pretrained( | |
| model_id, | |
| trust_remote_code=True, | |
| dtype=torch.bfloat16, | |
| device_map="auto", | |
| ) | |
| messages = [{"role": "user", "content": "Explain why the sky is blue."}] | |
| inputs = processor.apply_chat_template( | |
| messages, | |
| tokenize=True, | |
| add_generation_prompt=True, | |
| enable_thinking=False, | |
| return_dict=True, | |
| return_tensors="pt", | |
| ).to(model.device) | |
| output = model.generate(**inputs, max_new_tokens=256) | |
| new_tokens = output.sequences[:, inputs["input_ids"].shape[1]:] | |
| print(processor.batch_decode(new_tokens, skip_special_tokens=False)[0]) | |
| ``` | |
| ### Image input | |
| ```python | |
| from PIL import Image | |
| image = Image.open("example.jpg").convert("RGB") | |
| messages = [{ | |
| "role": "user", | |
| "content": [ | |
| {"type": "image", "image": image}, | |
| {"type": "text", "text": "Describe the image and identify uncertainty."}, | |
| ], | |
| }] | |
| inputs = processor.apply_chat_template( | |
| messages, | |
| tokenize=True, | |
| add_generation_prompt=True, | |
| enable_thinking=True, | |
| return_dict=True, | |
| return_tensors="pt", | |
| ).to(model.device) | |
| output = model.generate(**inputs, max_new_tokens=256) | |
| ``` | |
| ### Video-frame input | |
| The processor represents video as a sampled sequence of frames. The following example uses PyAV to decode a short local clip and samples at most 32 RGB frames. | |
| ```python | |
| import av | |
| from PIL import Image | |
| container = av.open("short_clip.mp4") | |
| decoded = [Image.fromarray(frame.to_rgb().to_ndarray()) for frame in container.decode(video=0)] | |
| stride = max(1, len(decoded) // 32) | |
| frames = decoded[::stride][:32] | |
| messages = [{ | |
| "role": "user", | |
| "content": [ | |
| {"type": "video", "video": frames}, | |
| {"type": "text", "text": "Summarize the main visual events in order."}, | |
| ], | |
| }] | |
| inputs = processor.apply_chat_template( | |
| messages, | |
| tokenize=True, | |
| add_generation_prompt=True, | |
| enable_thinking=True, | |
| return_dict=True, | |
| return_tensors="pt", | |
| ).to(model.device) | |
| output = model.generate(**inputs, max_new_tokens=256) | |
| ``` | |
| ## Thinking mode | |
| The official Gemma chat template controls the prompt, not the model's first generated tokens. | |
| - `enable_thinking=True` inserts a system turn that contains `<|think|>` and still ends the prompt at `<|turn>model`. | |
| - `enable_thinking=False` does **not** inject an empty thought channel. The prompt ends at `<|turn>model`. | |
| The model may still open `<|channel>thought` on its own. That is generation, not a template artifact. Applications should not assume hidden reasoning is complete, correct, or appropriate to expose to end users. | |
| ## Configurable inference parameters | |
| All model-owned values below are serialized in `config.json` and may be changed before loading or through a copied configuration object. | |
| | Parameter | Default | Meaning | | |
| | --- | ---: | --- | | |
| | `canvas_length` | 256 | Rolling diffusion canvas length | | |
| | `denoise_temperature` | 0.8 | Sampling temperature | | |
| | `commit_failure_budget` | 0.2 | Normal cumulative prefix risk limit | | |
| | `jump_failure_budget` | 2.0 | Forced-jump cumulative risk limit | | |
| | `jump_on_no_progress_after` | 12 | Stagnation threshold | | |
| | `max_ponder_steps` | 64 | Watchdog multiplier per requested token | | |
| | `min_trajectory_progress` | 0.005 | Minimum fused-risk improvement | | |
| | `repetition_penalty` | 1.0 | Transformers-style repetition penalty | | |
| | `latent_dim` | 1,536 | Latent state width | | |
| | `latent_memory_slots` | 64 | Persistent memory slot count | | |
| | `latent_num_layers` | 4 | Latent Transformer depth | | |
| | `latent_num_heads` | 16 | Latent attention heads | | |
| | `latent_local_attention_window` | 128 | Local token-attention window | | |
| | `latent_dropout` | 0.0 | Inference dropout probability | | |
| | `turn_end_token_id` | 106 | Gemma turn terminator | | |
| Example override: | |
| ```python | |
| from transformers import AutoConfig | |
| config = AutoConfig.from_pretrained(model_id, trust_remote_code=True) | |
| config.max_ponder_steps = 32 | |
| config.commit_failure_budget = 0.15 | |
| model = AutoModelForMultimodalLM.from_pretrained( | |
| model_id, | |
| config=config, | |
| trust_remote_code=True, | |
| dtype=torch.bfloat16, | |
| device_map="auto", | |
| ) | |
| ``` | |
| Generation supports left-padded batches with independent stopping and `generated_lengths` for every row. Batch prompts of similar lengths together for the best throughput; KV-cache and canvas memory grow with batch size. Streaming and caller-supplied KV caches remain limited to batch size 1. | |
| ## Details | |
| Trained on a single Apple silicon machine, in less than 24 hours, on about 7 million tokens. | |
| Developed on Mac by Modilify. | |
| ## Evaluation status, limitations, and risks | |
| The benchmark values above are partial one-shot estimates, not a complete evaluation. Export checks established checkpoint structure, exact adapter application, valid safetensors indexing, absence of residual adapters, and byte-level preservation of the vision tower and projection; they do not establish accuracy, robustness, calibration, fairness, safety, or fitness for use. | |
| The model can hallucinate facts, citations, visual details, or temporal relationships; reproduce bias, unsafe content, personal information, or copyrighted material; and consume substantial time and memory during long iterative generation. Confidence-based commits are compute-control decisions, not guarantees of correctness. Visual performance can degrade with poor resolution, motion, occlusion, unusual aspect ratios, or domain shift. | |
| Evaluate the exact deployment on representative, adversarial, and out-of-distribution inputs. Use layered safeguards, monitoring, incident response, and qualified human review, and never delegate autonomous high-risk medical, legal, financial, employment, housing, education, critical-infrastructure, or safety decisions to the model. | |
| ## License | |
| Released under the [Modilify Open Model License 1.0](LICENSE), subject to its responsible-use and derivative-impact terms. Upstream rights, attribution, Apache-2.0 text, and the impact-statement template are retained in [NOTICE.md](NOTICE.md). | |
| ## Citation | |
| ```bibtex | |
| @software{modilify_mk1_2026, | |
| title = {Modilify Mk1}, | |
| author = {Modilify}, | |
| year = {2026}, | |
| note = {A multimodal latent-deliberation derivative of DiffusionGemma, trained on one Apple silicon machine} | |
| } | |
| ``` | |
| Also cite the upstream DiffusionGemma release as requested by Google DeepMind. | |