mlx2coreml
mlx2coreml is a MLX -> Core ML translation pipeline.
It captures MLX graphs and converts them to to Core ML models (.mlpackage / .mlmodelc), suitable for on-device deployment through Xcode.
mlx2coreml is still experimental and may not work with all models.
Quick Start
pip install -U mlx2coreml
Examples
Converting MLX LM models to CoreML
python -m mlx2coreml.convert_mlx_lm \
--model-id mlx-community/Qwen3-0.6B-bf16 \
--output qwen3_0_6b_coreml \
--seq-len 128 \
--deployment-target iOS18 \
--convert-to mlprogram \
--compute-precision fp16 \
--compute-units all
Converting MLX Audio Smart Turn V3 to CoreML
python -m mlx2coreml.convert_mlx_audio \
--model-id mlx-community/smart-turn-v3 \
--output smart_turn_v3_coreml \
--audio-seconds 8 \
--deployment-target iOS18 \
--convert-to mlprogram \
--compute-precision fp16 \
--compute-units all
Note: This captures the model's input_features graph, which are preprocessed log-mel features; raw waveform preprocessing stays outside the converted Core ML model.
Direct conversion from Python
For arbitrary models, use the conversion API directly:
import numpy as np
import mlx.core as mx
from mlx_lm import load
import mlx2coreml as m2c
# Load an MLX LM model
model_id = "mlx-community/Qwen3-0.6B-bf16"
mlx_model, tokenizer = load(model_id, lazy=False)
# Build sample inputs for conversion
seq_len = 128
prompt = "hello"
input_ids = mx.array(tokenizer.encode(prompt), dtype=mx.int32)[None, ...]
inputs = {"input_ids": input_ids}
# Convert the model to a CoreML .mlprogram
config = m2c.ConversionConfig(
deployment_target="iOS18",
convert_to="mlprogram",
compute_precision="fp16",
flex_input_lens=[1, seq_len],
flex_input_names={"input_ids"},
)
coreml_model = m2c.convert_mlx_to_coreml(
mlx_model,
inputs,
config=config,
capture_function=lambda input_ids: mlx_model(input_ids),
)
model_path = "model.mlpackage"
coreml_model.model.save(model_path)
# Optional: compile the model to a CoreML .mlmodelc
compiled_path = m2c.compile_mlmodel(model_path, "model.mlmodelc")
Note that for some models, you need to prepare the input features if there's additional preprocessing required:
import numpy as np
from mlx_audio.vad import load
import mlx2coreml as m2c
model = load("mlx-community/smart-turn-v3")
features = model.prepare_input_features(np.zeros((16000,), dtype=np.float32), sample_rate=16000)
coreml_model = m2c.convert_mlx_to_coreml(
model,
{"input_features": features},
config=m2c.ConversionConfig(
deployment_target="iOS18",
convert_to="mlprogram",
compute_precision="fp16",
),
capture_function=lambda input_features: model(input_features),
)
model_path = "model.mlpackage"
coreml_model.model.save(model_path)
# Optional: compile the model to a CoreML .mlmodelc
compiled_path = m2c.compile_mlmodel(model_path, "model.mlmodelc")
Docs
- docs/ops_status.md: Supported op status
Metadata
Release files for mlx2coreml 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mlx2coreml-0.1.1.tar.gz | 86.3 kB | Without provenance | Details for mlx2coreml-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mlx2coreml-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for mlx2coreml-0.1.1-py3-none-any.whl |
Total release size: 152.6 kB
Release files / mlx2coreml-0.1.1.tar.gz
| Download URL | mlx2coreml-0.1.1.tar.gz |
|---|---|
| Size | 86.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
847f0accd1061fddc01d228b6f963169daa27bea11c05d402280a65e4f6f44e1
|
|
BLAKE2b-256 checksum How to use checksums |
6d549323222d397f4c60ae19fedd9dc9db600dc58ab507fdb79fd984180d4670
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / mlx2coreml-0.1.1-py3-none-any.whl
| Download URL | mlx2coreml-0.1.1-py3-none-any.whl |
|---|---|
| Size | 66.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f463aa0f2ce38ee59d1d752f1a507cd593f41c46fb2413092345b8ea31241741
|
|
BLAKE2b-256 checksum How to use checksums |
bd408bf23fa6191108ca77e3f0ef29b2d8a24d23e485dfd7a132b74d2f2122b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Security for mlx2coreml 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.