Meta возвращается с Muse Glimmer: локальной, агентной, мультимодальной и с открытым исходным кодом
В честь этого мы совместно с Meta обеспечиваем поддержку в день релиза в transformers, llama.cpp, vLLM, Inference Endpoints и других библиотеках. Мы создали несколько интересных решений и рассказываем о результатах в этой статье. Вдохновляйтесь приведенными ниже демоверсиями.
Найти Muse Glimmer на Hugging Face Hub можно здесь.
Бенчмарки
Результаты бенчмарковБаллы приведены в опубликованном виде. Полужирным выделен лучший результат среди сравниваемых моделей; ↓ означает, что меньшее значение лучше.
| Категория | Бенчмарк | Muse Glimmer-30B Режим высокого рассуждения |
Gemma4-31B Режим рассуждения |
Qwen3.6-27B Режим рассуждения |
|---|---|---|---|---|
| Общие агентные задачи | MCP Atlas | 75.5 | 54.2 | 62.5 |
| Общие агентные задачи | DeepSearch QA | 74.6 | 61.7 | 71.1 |
| Общие агентные задачи | τ³-Banking | 23.5 | 15.1 | 16.7 |
| Общие агентные задачи | WildClawBench | 47.6 | 37.6 | 43.2 |
| Общие агентные задачи | GDPval-AA | 953 | 811 | 1141 |
| Общие агентные задачи | GAIA2 | 43.3 | 36.4 | 40.0 |
| Общие агентные задачи | SkillsBench (с навыками) | 44.3 | 32.4 | 46.6 |
| Общие агентные задачи | OSWorld-Verified | 65.9 | 58.5 | 75.6 |
| Агентное программирование | SWE-Bench Pro | 51.2 | 36.9 | 50.2 |
| Агентное программирование | SWE-Bench Verified | 76.0 | 66.6 | 77.2 |
| Агентное программирование | TerminalBench 2.1 | 51.7 | 43.4 | 60.7 |
| Агентное программирование | SciCode | 43.6 | 43.4 | 39.8 |
| Мультимодальность | Charxiv Reasoning | 78.8 | 77.7 | 78.4 |
| Мультимодальность | ScreenSpot Pro | 75.4 | 75.9 | 76.1 |
| Мультимодальность | OmniDocBench v1.5 | 75.8 | 72.5 | 77.8 |
| Мультимодальность | MMMU Pro | 74 | 73 | 75 |
| Безопасность | CI Memories | Нарушения (↓): 26.4 Охват: 64.8 |
Нарушения (↓): 12.1 Охват: 53.0 |
Нарушения (↓): 53.4 Охват: 66.9 |
| Безопасность | Siren AgentDojo | Уровень успешных атак (↓): 28.4 Полезность: 94.2 |
Уровень успешных атак (↓): 25.6 Полезность: 90.8 |
Уровень успешных атак (↓): 40.3 Полезность: 92.7 |
| Общие возможности и рассуждение | IFBench | 77.0 | 76.0 | 70.8 |
| Общие возможности и рассуждение | AIME 2026 | 94.7 | 89.2 | 94.1 |
| Общие возможности и рассуждение | GPQA Diamond | 83.5 | 85.7 | 84.2 |
| Общие возможности и рассуждение | Humanity’s Last Exam (текст + без инструментов) | 22.0 | 23.6 | 23.1 |
| Общие возможности и рассуждение | AA-LCR | 80.0 | 68.3 | 73.3 |
| Общие возможности и рассуждение | Beam 128K | 65.1 | 58.2 | 63.0 |
Архитектура
Muse Glimmer — плотная модель с 30 млрд параметров, состоящая из:
- 2B-энкодера в стиле ViT для обработки изображений (Perception Encoder)
- текстового декодера с 28B параметров
Помимо основной VLM, существует также модуль чернового декодирования для спекулятивного декодирования, реализованный на базе DFlash. Использование этого модуля необязательно: он обеспечивает значительно более быструю генерацию ценой дополнительных затрат памяти. Мы обнаружили, что этот модуль особенно хорошо подходит для генерации структурированного содержимого, например кода.
Текстовый декодер
Языковая модель использует следующие архитектурные компоненты:
- Гибридное внимание: чередование трех слоев с раздвижным окном (по 2 048 токенов), использующих вращательное позиционное кодирование, за которыми следует четвертый слой с полным вниманием и NoPE (без позиционного кодирования). Таким образом, шаблон (SWA, SWA, SWA, Full) повторяется 13 раз, в общей сложности образуя 52 слоя. Это позволяет модели сохранять информацию об относительном порядке и расстоянии с помощью RoPE и глобально сохранять информацию с помощью NoPE.
- Gated Grouped-Query Attention: каждой голове ключей-значений соответствуют 16 голов запросов, что уменьшает объем памяти KV-кэша в 16 раз и делает генерацию быстрее и дешевле.
- Нормализация Q-K с дополнительным масштабированием запросов: перед вычислением внимания Muse Glimmer применяет RMS-нормализацию к каждой голове запросов и ключей, чтобы логиты внимания оставались стабильными. После этого запросы умножаются на коэффициент масштабирования, задающий целевой масштаб логитов после нормализации. Дополнительное масштабирование запросов действует на уровне softmax подобно обратной температуре.
Энкодер восприятия
Muse Glimmer использует один энкодер изображений для обработки изображений и видео. В отличие от относительно небольших энкодеров изображений, применяемых в других VLM, это крупная модель в стиле ViT с 2B параметров, созданная на основе архитектуры Perception Encoder. Perception Encoder ранее был представлен Meta как основа для различных пространственных и мультимодальных задач.
Энкодер разбивает изображения на патчи размером 2 кадра × 3 канала × 14 × 14 и пропускает их через линейный слой для проекции. Затем к этим представлениям добавляется интерполированное абсолютное позиционное кодирование из обучаемой таблицы позиций. После этого они передаются в зрительную башню, состоящую из 50 слоев и MLP с GELU. Как и в языковой модели, шаблон внимания состоит из трех слоев с оконным вниманием, за которыми следует один слой с полным вниманием. Внутри слоев внимания к запросам и ключам применяется 2D RoPE.
После трансформера pixel shuffle объединяет группы из 2×2 соседних пространственных токенов, что уменьшает количество токенов изображения в 4 раза без отбрасывания их каналов. Затем объединенные признаки проецируются в общее пространство эмбеддингов текстового декодера.
Видео проходят через тот же энкодер покадрово, при этом каждый кадр преобразуется в патчи (размерности [batch, temporal groups, grid height, grid width, 2 frames, 3 channels, 14, 14]). Процессор обрабатывает 2 кадра в секунду и ограничивает клип 96 кадрами, равномерно выбранными по всему видео. Процессор создает заполнители видео с временными метками, чередуя текст с кадрами, например «Time: 0.0s <|video|> x N», при этом перед финальным проекционным слоем эмбеддинги видео заменяются.
Transformers
Обновите transformers до последней версии, чтобы использовать Muse Glimmer.
pip install --upgrade transformers accelerate
Muse Glimmer поддерживается в transformers уже в день релиза — как для основной модели, так и для модуля чернового спекулятивного декодирования. Для загрузки модели и процессора можно использовать классы AutoModelForMultimodalLM и AutoProcessor.
from transformers import AutoProcessor, AutoModelForMultimodalLM
MODEL_ID = "meta-models/Muse-Glimmer-30B"
processor = AutoProcessor.from_pretrained(MODEL_ID)
model = AutoModelForMultimodalLM.from_pretrained(
MODEL_ID,
dtype="auto",
device_map="auto"
)
Один и тот же фрагмент кода без изменений работает на GPU NVIDIA (CUDA), AMD (ROCm) и Intel (XPU); device_map="auto" размещает модель на доступном ускорителе.
Инференс только по тексту
После загрузки модели можно выполнять инференс только по тексту следующим образом.
messages = [
{"role": "user", "content": "Write a short joke about saving RAM."},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
reasoning_strength="low"
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=1024)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
print(response)
Запросы к модели с изображениями и текстом
Для работы с изображениями и текстом понадобится torchvision.
pip install torchvision
Muse Glimmer принимает изображения на вход, как показано ниже:
messages = [
{
"role": "user", "content": [
{"type": "image", "image": "https://huggingface.co/datasets/merve/vl-test-suite/resolve/main/SF.png"},
{"type": "text", "text": "What is shown in this image?"}
]
}
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
reasoning_strength="low"
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=512)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
print(response)
Мультимодальный вызов инструментов
Muse Glimmer умеет выполнять мультимодальные вызовы инструментов — вот как это делать. В примере ниже мы просим модель вызвать инструмент прогноза погоды на основе города, изображенного на картинке.
import json
import re
tools = [
{
"type": "function",
"function": {
"name": "weather.get",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
},
"required": ["city"],
},
},
}
]
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": "https://huggingface.co/datasets/merve/vl-test-suite/resolve/main/SF.png"},
{"type": "text", "text": "I'm going to the city in this picture. What clothes should I wear?"},
],
},
]
inputs = processor.apply_chat_template(
messages,
tools=tools,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
reasoning_strength="low"
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=128)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
parsed = processor.tokenizer.parse_response(response)
Обнаружение объектов
Muse Glimmer можно использовать для обнаружения объектов в изображениях с произвольными запросами следующим образом.
import json
messages = [{
"role": "user",
"content": [
{"type": "image", "image": "https://huggingface.co/datasets/merve/vl-test-suite/resolve/main/SF.png"},
{
"type": "text",
"text": (
"Detect the bridge. Return only the detection in the model's "
"native object-detection format, with no explanation."
),
},
],
}]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=128)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
detections = json.loads(response.removesuffix("<|eot|>"))
print(detections)
xyxy = (
round(box["x_min"] / 1000 * width),
round(box["y_min"] / 1000 * height),
round(box["x_max"] / 1000 * width),
round(box["y_max"] / 1000 * height),
)
Инференс видео
Для работы с видео рекомендуем установить torchcodec в окружение.
pip install torchcodec
Muse Glimmer может отвечать на сложные вопросы о видео без звука. Инференс видео выполняется следующим образом; ниже приведен пример из VideoMME2 — самого популярного бенчмарка для ответов на вопросы по видео.
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "user",
"content": [
{"type": "video", "video": "https://huggingface.co/datasets/merve/vl-test-suite/resolve/main/IMG_8137.mp4"},
{"type": "text", "text": "Describe what happens in this video."},
],
},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
reasoning_strength="low",
processor_kwargs={"num_frames": 96},
).to(model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=1024)
response = processor.decode(
outputs[0, input_len:],
skip_special_tokens=False,
)
parsed = processor.parse_response(
response,
prefix=inputs["input_ids"],
)
print(parsed)
Llama.cpp
Muse Glimmer поддерживает llama.cpp уже в день релиза. Meta опубликовала откалиброванные квантизированные версии в этом репозитории, а Uunsloth также выпускает оптимизированные квантизированные версии. Поддерживается и спекулятивное декодирование DFlash. Для запуска сервера llama или CLI можно использовать предварительно собранный бинарный файл llama. Чтобы установить llama.cpp, выполните:
curl -LsSf https://llama.app/install.sh | sh
Затем запустите сервер следующим образом.
llama serve meta-models/Muse-Glimmer-30B-GGUF
После запуска сервера перейдите на localhost:8080, чтобы общаться со встроенным WebUI.
TODO: добавить видео webui с этой моделью
Также можно отправлять запросы к серверу следующим образом.
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a limerick about python exceptions"}
]
}'
Сервер llama также можно использовать с агентами для программирования, например Pi.
Спекулятивное декодирование
DFlash использует легковесную черновую модель на основе блочной диффузии, чтобы выдавать тот же результат с дополнительным ускорением на этапе декодирования. Transformers и llama.cpp поддерживают черновую модель DFlash для Muse Glimmer уже в день релиза.
Ниже показано, как спекулятивное декодирование может ускорить генерацию в реалистичных сценариях. На видео слева показан webui llama.cpp с DFlash, а справа — обычная генерация.
Спекулятивное декодирование с transformers
Загрузить черновую модель и основную модель можно следующим образом; инференс выполняется так же, как и для базовой модели, с дополнительным параметром (показанным в следующих фрагментах).
import torch
from transformers import AutoProcessor, MuseGlimmerAssistantModel, MuseGlimmerForConditionalGeneration
model_id = "meta-models/Muse-Glimmer-30B"
target = MuseGlimmerForConditionalGeneration.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
assistant = MuseGlimmerAssistantModel.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
messages = [
{
"role": "user", "content": [
{"type": "image", "url": "https://huggingface.co/datasets/merve/vl-test-suite/resolve/main/SF.png"},
{"type": "text", "text": "What is shown in this image?"}
]
}
]
out = target.generate(**inputs, assistant_model=assistant, speculation_type="dflash", max_new_tokens=64, do_sample=True)
print(processor.batch_decode(out)[0])
Спекулятивное декодирование с llama.cpp
Сервер llama можно запустить следующей командой. Аргумент --spec-draft-n-max управляет количеством будущих токенов, предлагаемых DFlash на каждом шаге спекулятивного декодирования. Модель DFlash для Muse Glimmer обучалась с размером блока 16: один якорный токен плюс 15 предлагаемых токенов, поэтому любое значение выше 15 будет ограничено 15.
llama serve -hf meta-models/Muse-Glimmer-30B-GGUF --spec-type draft-dflash --spec-draft-n-max 15
Также можно использовать llama cli с черновой моделью для спекулятивного декодирования следующим образом.
llama cli -hf meta-models/Muse-Glimmer-30B-GGUF --spec-type draft-dflash
Поддержка Muse Glimmer в vLLM с бэкендом transformers
В рамках этого релиза мы добавляем поддержку vLLM с бэкендом transformers.
vllm serve meta-models/Muse-Glimmer-30B --model-impl transformers --tensor-parallel-size 4
curl -s http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "meta-models/Muse-Glimmer-30B",
"messages": [
{"role": "user", "content": "Explain tensor parallelism briefly."}
],
"temperature": 0.0,
"max_tokens": 256
}'
Дообучение с TRL
Для дообучения Muse Glimmer различными методами — от SFT до Async GRPO — можно использовать TRL. Мы провели два эксперимента в формате bf16 на GPU класса Hopper с 80 ГБ видеопамяти каждый.
| Рабочая нагрузка | Практический минимум |
|---|---|
| Инференс / оценка, BF16 | 1×80 ГБ H100 |
| LoRA SFT, BF16 | 1×80 ГБ H100, микропакет 1 + чекпоинтинг |
| Полное SFT, BF16 | 8×80 ГБ H100 с FSDP/ZeRO-3 |
| LoRA GRPO, развертывание Transformers | 1×80 ГБ H100, но медленно и впритык |
| LoRA GRPO, отдельный сервер развертывания vLLM | 8×H100: 4 для развертывания + 4 для обучения |
| Полное дообучение GRPO | 8 GPU обычно недостаточно |
В рамках этого релиза мы добавляем пример дообучения Muse Glimmer на небольшой выборке датасета MolmoWeb. Он показывает, как заставить модель генерировать структурированные выходные данные и как выполнять дообучение на изображениях.
Мы также экспериментировали с запуском модели в OpenCode с примером AsyncGRPO. Модель демонстрирует сильные способности к программированию, поэтому мы рекомендуем попробовать обучение в средах программирования с OpenEnv и TRL.
Демонстрации
Вот несколько интересных способов попробовать Muse Glimmer. На наш взгляд, самое впечатляющее в этой модели — локальный персональный ассистент, способный программировать. Это означает, что его можно научить самостоятельно квантовать себя, находить квантизированные веса на Hub, развертывать себя в inference endpoints и даже оптимизировать под конкретное оборудование! Вперед, локальные решения 🚀
Подключение OpenClaw к Muse Glimmer
Предположим, что Inference Endpoint предоставляет совместимый с OpenAI API /v1.
Установите HF_TOKEN в окружении шлюза OpenClaw, затем добавьте это в ~/.openclaw/openclaw.json:
{
models: {
mode: "merge",
providers: {
muse: {
baseUrl: "https://YOUR-ENDPOINT.endpoints.huggingface.cloud/v1",
apiKey: {
source: "env",
provider: "default",
id: "HF_TOKEN"
},
api: "openai-completions",
authHeader: true,
models: [{
id: "meta-models/Muse-Glimmer-30B",
name: "Muse Glimmer",
reasoning: false,
input: ["text", "image"],
contextWindow: 32768,
maxTokens: 8192
}]
}
}
},
agents: {
defaults: {
model: { primary: "muse/meta-models/Muse-Glimmer-30B" }
}
}
}
Перезапустите OpenClaw:
openclaw gateway restart
Проверьте работу из новой сессии:
openclaw agent --message "Reply with: muse-ready"
Если он отличается, используйте точный идентификатор модели, возвращаемый ответом endpoint на запрос /v1/models.
Эй, Muse Glimmer, квантуй себя
Если подключить Muse Glimmer к Hugging Face MCP и обновить ее AGENTS.md, мы дадим ей возможность найти на Hub собственную квантизированную версию и запустить ее локально. Это удобно, если вы хотите работать с чем-то приватным или просто сократить расходы.
Если сделать это во второй раз, Muse Glimmer найдет кэшированные веса и переключится на них, поэтому можно добавить удобную команду вроде /spawn.
Muse Glimmer проверяет компьютер и Hub, выбирает или создает Q4_K_M GGUF, запускает llama-server и проверяет обнаружение модели и завершение чата. В результате получается уменьшенная локальная сборка за совместимым с OpenAI API. Вот запрос, который мы добавили в AGENTS.md.
Добавив это в AGENTS.md, вы сделаете openclaw или hermes способными выполнить остальную работу.
## Local model deployment
When asked to deploy locally, perform the work; do not give instructions.
1. Inspect hardware and the Hugging Face cache.
2. Search the Hub for compatible GGUF weights using `apps=llama.cpp`; confirm exact filenames through the model-tree API.
3. Prefer an existing suitable GGUF, normally `Q4_K_M`. Treat `mmproj-*.gguf` as projector weights.
4. If no GGUF exists, download the source weights, convert with `convert_hf_to_gguf.py`, then quantize with `llama-quantize`.
5. Preserve source weights and record the repository, revision, filenames, and quantization.
6. Start `llama-server` with an `onyx` alias and an OpenAI-compatible endpoint.
7. Validate `/v1/models` and `/v1/chat/completions`, requiring non-empty, correct content.
8. Report concise progress and logs. Claim completion only after validation passes.
Эй, Muse Glimmer, разверни себя
Muse Glimmer также может позаботиться об обратной задаче. Давайте попросим Glimmer развернуть себя в Hugging Face Inference Endpoints. Это полезно, если вы хотите ускорить работу на современном оборудовании.
Примечание: можно также напрямую развернуть Muse Glimmer в Inference Endpoints и подключить своего агента.
Muse Glimmer фиксирует ревизию модели, развертывает ее в защищенном Hugging Face Inference Endpoint и проверяет состояние, обнаружение модели и завершение чата. Затем она подключает агента Claw с сохранением секретов и возможности отката. Вот запрос, который мы добавили в AGENTS.md. Muse Glimmer также понадобится Hugging Face MCP и/или Hugging Face CLI и Skills.
## Hugging Face Inference Endpoint deployment
When asked to deploy on Hugging Face Inference Endpoints, perform the work; do
not give instructions.
1. Inspect Hugging Face authentication, the current model repository, and any
existing endpoints.
2. Confirm the exact model repository and immutable revision through the Hub
API; inspect its architecture, configuration, and chat template.
3. Confirm that the model is supported by vLLM, then deploy or update a
protected Inference Endpoint using the managed native vLLM engine.
4. Choose an available region and the smallest suitable accelerator. Use one
replica and enable scale-to-zero when supported.
5. Preserve the previous endpoint configuration for rollback. Do not expose
tokens, publish private weights, or replace an unrelated endpoint.
6. Wait for the endpoint to become ready. If startup fails, inspect the logs
and report the actual blocker rather than repeatedly changing settings.
7. Validate `/health`, `/v1/models`, and `/v1/chat/completions`, requiring the
expected model and non-empty, correct content. When agent use is required,
also validate a real structured tool call.
8. Configure the Claw agent to use the endpoint's OpenAI-compatible `/v1` URL,
storing credentials as secrets and retaining the previous provider as
rollback. Test the connection in a fresh session.
9. Report concise progress and finish with the repository, revision, engine,
hardware, endpoint URL, scaling state, and validation results. Claim
completion only after every required check passes.
Эй, Muse Glimmer, оптимизируй себя
Наконец, давайте попросим Muse Glimmer выполнить небольшой RSI. Мы можем поручить агенту оптимизировать собственный движок инференса под конкретное оборудование — в данном случае Nvidia H100. Для этого агенту понадобится другой движок инференса, например Inference Endpoints выше.
Muse Glimmer тестирует собственный стек обслуживания на одной H100, проверяя по одному обратимому изменению за раз при фиксированной рабочей нагрузке. Она сохраняет только прирост производительности, подтвержденный проверкой корректности, и завершает работу с самой быстрой воспроизводимой конфигурацией. Вот запрос, который мы добавили в AGENTS.md. Muse Glimmer также понадобятся Hugging Face MCP и Hugging Face CLI и Skills.
You are Muse Glimmer acting as an autonomous inference-optimization engineer for your own serving stack.
Goal: maximize valid single-H100 aggregate completion throughput in tokens/second.
Protocol:
1. Establish a correctness-passing baseline.
2. Test one reversible optimization at a time.
3. Keep the prompt, concurrency, sampling, request count, warm-up, and decode length fixed.
4. Reject results that fail correctness or prefix checks.
5. Record every experiment chronologically with its configuration, raw throughput, correctness, and delta.
6. Keep improvements and revert regressions.
7. Stop after six consecutive regressions or when the experiment budget is exhausted.
8. Report the best valid configuration and exact reproduction command.
Create a minimal scientific animation of the results:
- white background;
- raw tokens/second—never normalize;
- one point revealed per experiment;
- connect every point chronologically;
- begin with the lowest valid result;
- stop at the best result;
- export as a GIF.
Never fabricate, interpolate, or count correctness-failing measurements.
Эй, Muse Glimmer, исследуй Hub
Попробуйте Muse Glimmer в качестве исследовательского агента Hugging Face. Gradio Space отправляет каждый запрос к модели в приватный Hugging Face Inference Endpoint через его совместимый с OpenAI API. Он также подключается к официальному серверу Hugging Face MCP, предоставляя агенту инструменты только для чтения для поиска и изучения репозиториев Hub, моделей, датасетов, Spaces, документации и статей.
Заключение
Мы рады приветствовать Muse Glimmer на Hugging Face Hub. Попробуйте Muse Glimmer в своих локальных средах разработки уже сегодня!
Модели, упомянутые в этой статье 3
Статьи, упомянутые в этой статье 1
Сообщество
· Зарегистрируйтесь или войдите, чтобы оставить комментарий
Модели, упомянутые в этой статье 3
Статьи, упомянутые в этой статье 1
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.

