[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-senstella--parakeet-mlx":3,"tool-senstella--parakeet-mlx":64},[4,16,27,35,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":15},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,14],"Agent","插件","ready",{"id":17,"name":18,"github_repo":19,"description_zh":20,"stars":21,"difficulty_score":22,"last_commit_at":23,"category_tags":24,"status":15},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,2,"2026-04-10T01:20:03",[14,13,25,26],"图像","开发框架",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":22,"last_commit_at":33,"category_tags":34,"status":15},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[14,26],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":22,"last_commit_at":41,"category_tags":42,"status":15},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85267,"2026-04-18T11:00:28",[25,43,44,14,13,45,46,26,47],"数据工具","视频","其他","语言模型","音频",{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":22,"last_commit_at":54,"category_tags":55,"status":15},51,"gstack","garrytan\u002Fgstack","gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置，旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战，gstack 提供了一套标准化解决方案，帮助开发者实现堪比二十人团队的高效产出。\n\n这套配置特别适合希望提升交付效率的创始人、技术负责人，以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具，涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令（如 `\u002Freview` 进行代码审查、`\u002Fqa` 执行测试、`\u002Fplan-ceo-review` 规划功能），即可自动化处理从需求分析到部署上线的全链路任务。\n\n所有操作基于 Markdown 和斜杠命令，无需复杂配置，完全免费且遵循 MIT 协议。gstack 不仅是一套工具集，更是一种现代化的软件工厂实践，让单人开发者也能拥有严谨的工程流程。",75502,"2026-04-18T11:08:56",[13,14],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":15},7525,"codex","openai\u002Fcodex","Codex 是 OpenAI 推出的一款轻量级编程智能体，专为在终端环境中高效运行而设计。它允许开发者直接在命令行界面与 AI 交互，完成代码生成、调试、重构及项目维护等任务，无需频繁切换至浏览器或集成开发环境，从而显著提升了编码流程的连贯性与专注度。\n\n这款工具主要解决了传统 AI 辅助编程中上下文割裂的问题。通过将智能体本地化运行，Codex 能够更紧密地结合当前工作目录的文件结构，提供更具针对性的代码建议，同时支持以自然语言指令驱动复杂的开发操作，让“对话即编码”成为现实。\n\nCodex 非常适合习惯使用命令行的软件工程师、全栈开发者以及技术研究人员。对于追求极致效率、偏好键盘操作胜过图形界面的极客用户而言，它更是理想的结对编程伙伴。\n\n其独特亮点在于灵活的部署方式：既可作为全局命令行工具通过 npm 或 Homebrew 一键安装，也能无缝对接现有的 ChatGPT 订阅计划（如 Plus 或 Pro），直接复用账户权益。此外，它还提供了从纯文本终端到桌面应用的多形态体验，并支持基于 API 密钥的深度定制，充分满足不同场景下的开发需求。",75220,"2026-04-14T14:40:34",[46,13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":78,"owner_location":78,"owner_email":79,"owner_twitter":78,"owner_website":78,"owner_url":80,"languages":81,"stars":86,"forks":87,"last_commit_at":88,"license":89,"difficulty_score":22,"env_os":90,"env_gpu":91,"env_ram":92,"env_deps":93,"category_tags":105,"github_topics":78,"view_count":22,"oss_zip_url":78,"oss_zip_packed_at":78,"status":15,"created_at":106,"updated_at":107,"faqs":108,"releases":138},9042,"senstella\u002Fparakeet-mlx","parakeet-mlx","An implementation of the Nvidia's Parakeet models for Apple Silicon using MLX.","parakeet-mlx 是一款专为苹果 Silicon 芯片（M1\u002FM2\u002FM3 系列）优化的开源语音识别工具。它将英伟达强大的 Parakeet 自动语音识别模型移植到苹果的 MLX 框架上，让用户能在 Mac 本地高效、隐私安全地将音频文件转换为文字字幕。\n\n这款工具主要解决了在苹果设备上运行高性能语音模型的需求，无需依赖云端服务即可处理 WAV、MP3 等多种格式的音频。它特别适合开发者、研究人员以及需要批量处理音频转录的普通用户。无论是制作视频字幕、会议记录整理，还是进行语音数据研究，parakeet-mlx 都能提供流畅的体验。\n\n其技术亮点在于深度适配苹果硬件，支持多种解码策略（如贪婪搜索和束搜索），并具备处理长音频的分块机制。用户可通过简单的命令行操作或 Python API 快速上手，灵活定制输出格式（如 SRT、VTT、JSON 等），甚至能生成带时间戳的词级高亮字幕。此外，它还提供了局部注意力机制选项，有效降低长音频转录时的内存占用。安装简便，只需一条命令即可通过 uv 或 pip 部署，是苹果生态下极具性价比的本地化语音识别方案。","# Parakeet MLX\n\nAn implementation of the Parakeet models - Nvidia's ASR(Automatic Speech Recognition) models - for Apple Silicon using MLX.\n\n## Installation\n\n> [!NOTE]\n> Make sure you have `ffmpeg` installed on your system first, otherwise CLI won't work properly.\n\nUsing [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F) - recommended way:\n\n```bash\nuv add parakeet-mlx -U\n```\n\nOr, for the CLI:\n\n```bash\nuv tool install parakeet-mlx -U\n```\n\nUsing pip:\n\n```bash\npip install parakeet-mlx -U\n```\n\n## CLI Quick Start\n\n```bash\nparakeet-mlx \u003Caudio_files> [OPTIONS]\n```\n\n## Arguments\n\n- `audio_files`: One or more audio files to transcribe (WAV, MP3, etc.)\n\n## Options\n\n- `--model` (default: `mlx-community\u002Fparakeet-tdt-0.6b-v3`, env: `PARAKEET_MODEL`)\n  - Hugging Face repository of the model to use\n  - https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Fmlx-community\u002Fparakeet\n\n- `--output-dir` (default: current directory)\n  - Directory to save transcription outputs\n\n- `--output-format` (default: srt, env: `PARAKEET_OUTPUT_FORMAT`)\n  - Output format (txt\u002Fsrt\u002Fvtt\u002Fjson\u002Fall)\n\n- `--output-template` (default: `{filename}`, env: `PARAKEET_OUTPUT_TEMPLATE`)\n  - Template for output filenames, `{parent}`, `{filename}`, `{index}`, `{date}` is supported.\n\n- `--highlight-words` (default: False)\n  - Enable word-level timestamps in SRT\u002FVTT outputs\n\n- `--verbose` \u002F `-v` (default: False)\n  - Print detailed progress information\n\n- `--decoding` (default: `greedy`, env: `PARAKEET_DECODING`)\n  - Decoding method to use (`greedy` or `beam`)\n  - `beam` is only available at TDT models for now\n\n- `--chunk-duration` (default: 120 seconds, env: `PARAKEET_CHUNK_DURATION`)\n  - Chunking duration in seconds for long audio, `0` to disable chunking\n\n- `--overlap-duration` (default: 15 seconds, env: `PARAKEET_OVERLAP_DURATION`)\n  - Overlap duration in seconds if using chunking\n\n- `--beam-size` (default: 5, env: `PARAKEET_BEAM_SIZE`)\n  - Beam size (only used while beam decoding)\n\n- `--length-penalty` (default: 0.013, env: `PARAKEET_LENGTH_PENALTY`)\n  - Length penalty in beam. 0.0 to disable (only used while beam decoding)\n\n- `--patience` (default: 3.5, env: `PARAKEET_PATIENCE`)\n  - Patience in beam. 1.0 to disable (only used while beam decoding)\n\n- `--duration-reward` (default: 0.67, env: `PARAKEET_DURATION_REWARD`)\n  - From 0.0 to 1.0, \u003C 0.5 to favor token logprobs more, > 0.5 to favor duration logprobs more. (only used while beam decoding in TDT)\n\n- `--max-words` (default: None, env: `PARAKEET_MAX_WORDS`)\n  - Max words per sentence\n\n- `--silence-gap` (default: None, env: `PARAKEET_SILENCE_GAP`)\n  - Split sentence if it exceeds silence gap provided (seconds)\n\n- `--max-duration` (default: None, env: `PARAKEET_MAX_DURATION`)\n  - Max sentence duration (seconds)\n\n- `--fp32` \u002F `--bf16` (default: `bf16`, env: `PARAKEET_FP32` - boolean)\n  - Determine the precision to use\n\n- `--full-attention` \u002F `--local-attention` (default: `full-attention`, env: `PARAKEET_LOCAL_ATTENTION` - boolean)\n  - Use full attention or local attention (Local attention reduces intermediate memory usage)\n  - Expected usage case is for long audio transcribing without chunking\n\n- `--local-attention-context-size` (default: 256, env: `PARAKEET_LOCAL_ATTENTION_CTX`)\n  - Local attention context size(window) in frames of Parakeet model\n\n- `--cache-dir` (default: None, env: `PARAKEET_CACHE_DIR`)\n  - Directory for HuggingFace model cache. If not specified, uses HF's default cache location [(~\u002F.cache\u002Fhuggingface or values you set in `HF_HOME` or `HF_HUB_CACHE` which is essentially `$HF_HOME\u002Fhub`)](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Fhuggingface_hub\u002Fguides\u002Fmanage-cache)\n\n## Examples\n\n```bash\n# Basic transcription\nparakeet-mlx audio.mp3\n\n# Multiple files with word-level timestamps of VTT subtitle\nparakeet-mlx *.mp3 --output-format vtt --highlight-words\n\n# Generate all output formats\nparakeet-mlx audio.mp3 --output-format all\n```\n\n\n## Python API Quick Start\n\nTranscribe a file:\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.text)\n```\n\nCheck timestamps:\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.sentences)\n# [AlignedSentence(text=\"Hello World.\", start=1.01, end=2.04, duration=1.03, tokens=[...])]\n```\n\nDo chunking:\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\", chunk_duration=60 * 2.0, overlap_duration=15.0)\n\nprint(result.sentences)\n```\n\nDo beam decoding:\n\n```py\nfrom parakeet_mlx import from_pretrained, DecodingConfig, Beam\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nconfig = DecodingConfig(\n    decoding = decoding(\n        beam_size=5, length_penalty=0.013, patience=3.5, duration_reward=0.67\n        # Refer to CLI options for each parameters \n    )\n)\n\nresult = model.transcribe(\"audio_file.wav\", decoding_config=config)\n\nprint(result.sentences)\n```\n\nUse local attention:\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nmodel.encoder.set_attention_model(\n    \"rel_pos_local_attn\", # Follows NeMo's naming convention\n    (256, 256),\n)\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.sentences)\n```\n\nSpecifiy the sentence split options:\n\n```py\nfrom parakeet_mlx import from_pretrained, DecodingConfig, SentenceConfig\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nconfig = DecodingConfig(\n    sentence = SentenceConfig(\n        # Refer to CLI Options to see what those options does\n        max_words=30, silence_gap=5.0, max_duration=40.0\n    )\n)\n\nresult = model.transcribe(\"audio_file.wav\", decoding_config=config)\n\nprint(result.sentences)\n```\n\n## from_pretrained\n\nUsing `from_pretrained` downloads a model from Hugging Face and stores the downloaded model in HF's [cache folder](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Fhuggingface_hub\u002Fen\u002Fguides\u002Fmanage-cache). You can specify the cache folder by passing it `cache_dir` args. It can return one of those Parakeet variants such as: `ParakeetTDT`, `ParakeetRNNT`, `ParakeetCTC`, or `ParakeetTDTCTC`. For general use cases, the `BaseParakeet` abstraction often suffices. However, if you want to call variant-specific functions like `.decode()` and want linters not to complain, `typing.cast` can be used.\n\n## Timestamp Result\n\n- `AlignedResult`: Top-level result containing the full text and sentences\n  - `text`: Full transcribed text\n  - `sentences`: List of `AlignedSentence`\n- `AlignedSentence`: Sentence-level alignments with start\u002Fend times\n  - `text`: Sentence text\n  - `start`: Start time in seconds\n  - `end`: End time in seconds\n  - `duration`: Between `start` and `end`.\n  - `tokens`: List of `AlignedToken`\n- `AlignedToken`: Word\u002Ftoken-level alignments with precise timestamps\n  - `text`: Token text\n  - `start`: Start time in seconds\n  - `end`: End time in seconds\n  - `duration`: Between `start` and `end`.\n\n## Streaming Transcription\n\nFor real-time transcription, use the `transcribe_stream` method which creates a streaming context:\n\n```py\nfrom parakeet_mlx import from_pretrained\nfrom parakeet_mlx.audio import load_audio\nimport numpy as np\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\n# Create a streaming context\nwith model.transcribe_stream(\n    context_size=(256, 256),  # (left_context, right_context) frames\n) as transcriber:\n    # Simulate real-time audio chunks\n    audio_data = load_audio(\"audio_file.wav\", model.preprocessor_config.sample_rate)\n    chunk_size = model.preprocessor_config.sample_rate  # 1 second chunks\n\n    for i in range(0, len(audio_data), chunk_size):\n        chunk = audio_data[i:i+chunk_size]\n        transcriber.add_audio(chunk)\n\n        # Access current transcription\n        result = transcriber.result\n        print(f\"Current text: {result.text}\")\n\n        # Access finalized and draft tokens\n        # transcriber.finalized_tokens\n        # transcriber.draft_tokens\n```\n\n### Streaming Parameters\n\n- `context_size`: Tuple of (left_context, right_context) for attention windows\n  - Controls how many frames the model looks at before and after current position\n  - Default: (256, 256)\n\n- `depth`: Number of encoder layers that preserve exact computation across chunks\n  - Controls how many layers maintain exact equivalence with non-streaming forward pass\n  - depth=1: Only first encoder layer matches non-streaming computation exactly\n  - depth=2: First two layers match exactly, and so on\n  - depth=N (total layers): Full equivalence to non-streaming forward pass\n  - Higher depth means more computational consistency with non-streaming mode\n  - Default: 1\n\n- `keep_original_attention`: Whether to keep original attention mechanism\n  - False: Switches to local attention for streaming (recommended)\n  - True: Keeps original attention (less suitable for streaming)\n  - Default: False\n\n## Low-Level API\n\nTo transcribe log-mel spectrum directly, you can do the following:\n\n```python\nimport mlx.core as mx\nfrom parakeet_mlx.audio import get_logmel, load_audio\nfrom parakeet_mlx import DecodingConfig\n\n# Load and preprocess audio manually\naudio = load_audio(\"audio.wav\", model.preprocessor_config.sample_rate)\nmel = get_logmel(audio, model.preprocessor_config)\n\n# Generate transcription with alignments\n# Accepts both [batch, sequence, feat] and [sequence, feat]\n# `alignments` is list of AlignedResult. (no matter if you fed batch dimension or not!)\nalignments = model.generate(mel, decoding_config=DecodingConfig())\n```\n\n## Todo\n\n- [X] Add CLI for better usability\n- [X] Add support for other Parakeet variants\n- [X] Streaming input (real-time transcription with `transcribe_stream`)\n- [ ] Option to enhance chosen words' accuracy\n- [ ] Chunking with continuous context (partially achieved with streaming)\n\n\n## Acknowledgments\n\n- Thanks to [Nvidia](https:\u002F\u002Fwww.nvidia.com\u002F) for training these awesome models and writing cool papers and providing nice implementation.\n- Thanks to [MLX](https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx) project for providing the framework that made this implementation possible.\n- Thanks to [audiofile](https:\u002F\u002Fgithub.com\u002Faudeering\u002Faudiofile) and [audresample](https:\u002F\u002Fgithub.com\u002Faudeering\u002Faudresample), [numpy](https:\u002F\u002Fnumpy.org), [librosa](https:\u002F\u002Flibrosa.org) for audio processing.\n- Thanks to [dacite](https:\u002F\u002Fgithub.com\u002Fkonradhalas\u002Fdacite) for config management.\n\n## License\n\nApache 2.0\n","# Parakeet MLX\n\n基于 MLX 的 Parakeet 模型实现——NVIDIA 的自动语音识别（ASR）模型，专为 Apple Silicon 设计。\n\n## 安装\n\n> [!NOTE]  \n> 请确保您的系统已安装 `ffmpeg`，否则 CLI 将无法正常工作。\n\n使用 [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F)（推荐方式）：\n\n```bash\nuv add parakeet-mlx -U\n```\n\n或者，对于 CLI：\n\n```bash\nuv tool install parakeet-mlx -U\n```\n\n使用 pip：\n\n```bash\npip install parakeet-mlx -U\n```\n\n## CLI 快速入门\n\n```bash\nparakeet-mlx \u003Caudio_files> [OPTIONS]\n```\n\n## 参数\n\n- `audio_files`: 要转录的一个或多个音频文件（WAV、MP3 等）\n\n## 选项\n\n- `--model`（默认值：`mlx-community\u002Fparakeet-tdt-0.6b-v3`，环境变量：`PARAKEET_MODEL`）  \n  使用的模型的 Hugging Face 仓库  \n  https:\u002F\u002Fhuggingface.co\u002Fcollections\u002Fmlx-community\u002Fparakeet\n\n- `--output-dir`（默认值：当前目录）  \n  保存转录结果的目录\n\n- `--output-format`（默认值：srt，环境变量：`PARAKEET_OUTPUT_FORMAT`）  \n  输出格式（txt\u002Fsrt\u002Fvtt\u002Fjson\u002Fall）\n\n- `--output-template`（默认值：`{filename}`，环境变量：`PARAKEET_OUTPUT_TEMPLATE`）  \n  输出文件名模板，支持 `{parent}`、`{filename}`、`{index}`、`{date}`。\n\n- `--highlight-words`（默认值：False）  \n  在 SRT\u002FVTT 输出中启用词级时间戳\n\n- `--verbose` \u002F `-v`（默认值：False）  \n  打印详细的进度信息\n\n- `--decoding`（默认值：`greedy`，环境变量：`PARAKEET_DECODING`）  \n  解码方法（`greedy` 或 `beam`）  \n  目前仅 TDT 模型支持 `beam` 解码\n\n- `--chunk-duration`（默认值：120 秒，环境变量：`PARAKEET_CHUNK_DURATION`）  \n  长音频分块处理时的每块时长，设置为 `0` 可禁用分块\n\n- `--overlap-duration`（默认值：15 秒，环境变量：`PARAKEET_OVERLAP_DURATION`）  \n  使用分块时的重叠时长\n\n- `--beam-size`（默认值：5，环境变量：`PARAKEET_BEAM_SIZE`）  \n  束搜索的宽度（仅在束搜索解码时使用）\n\n- `--length-penalty`（默认值：0.013，环境变量：`PARAKEET_LENGTH_PENALTY`）  \n  束搜索中的长度惩罚。设置为 `0.0` 可禁用（仅在束搜索解码时使用）\n\n- `--patience`（默认值：3.5，环境变量：`PARAKEET_PATIENCE`）  \n  束搜索中的耐心参数。设置为 `1.0` 可禁用（仅在束搜索解码时使用）\n\n- `--duration-reward`（默认值：0.67，环境变量：`PARAKEET_DURATION_REWARD`）  \n  值范围为 0.0 到 1.0，小于 0.5 时更倾向于 token 对数似然，大于 0.5 时更倾向于持续时间对数似然。（仅在 TDT 的束搜索解码时使用）\n\n- `--max-words`（默认值：无，环境变量：`PARAKEET_MAX_WORDS`）  \n  每个句子的最大词数\n\n- `--silence-gap`（默认值：无，环境变量：`PARAKEET_SILENCE_GAP`）  \n  如果句子超过指定的静音间隔（秒），则将其拆分\n\n- `--max-duration`（默认值：无，环境变量：`PARAKEET_MAX_DURATION`）  \n  每个句子的最大时长（秒）\n\n- `--fp32` \u002F `--bf16`（默认值：`bf16`，环境变量：`PARAKEET_FP32` - 布尔值）  \n  决定使用的精度\n\n- `--full-attention` \u002F `--local-attention`（默认值：`full-attention`，环境变量：`PARAKEET_LOCAL_ATTENTION` - 布尔值）  \n  使用全局注意力还是局部注意力（局部注意力可减少中间内存占用）  \n  适用于不进行分块的长音频转录场景\n\n- `--local-attention-context-size`（默认值：256，环境变量：`PARAKEET_LOCAL_ATTENTION_CTX`）  \n  Parakeet 模型中局部注意力的上下文窗口大小（以帧为单位）\n\n- `--cache-dir`（默认值：无，环境变量：`PARAKEET_CACHE_DIR`）  \n  Hugging Face 模型缓存目录。若未指定，则使用 HF 的默认缓存位置 [(~\u002F.cache\u002Fhuggingface 或您在 `HF_HOME` 或 `HF_HUB_CACHE` 中设置的路径，即 `$HF_HOME\u002Fhub`)](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Fhuggingface_hub\u002Fguides\u002Fmanage-cache)\n\n## 示例\n\n```bash\n# 基本转录\nparakeet-mlx audio.mp3\n\n# 多个文件，并生成带有词级时间戳的 VTT 字幕\nparakeet-mlx *.mp3 --output-format vtt --highlight-words\n\n# 生成所有输出格式\nparakeet-mlx audio.mp3 --output-format all\n```\n\n\n## Python API 快速入门\n\n转录一个文件：\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.text)\n```\n\n查看时间戳：\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.sentences)\n# [AlignedSentence(text=\"Hello World.\", start=1.01, end=2.04, duration=1.03, tokens=[...])]\n```\n\n进行分块处理：\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nresult = model.transcribe(\"audio_file.wav\", chunk_duration=60 * 2.0, overlap_duration=15.0)\n\nprint(result.sentences)\n```\n\n使用束搜索解码：\n\n```py\nfrom parakeet_mlx import from_pretrained, DecodingConfig, Beam\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nconfig = DecodingConfig(\n    decoding = decoding(\n        beam_size=5, length_penalty=0.013, patience=3.5, duration_reward=0.67\n        # 参考 CLI 选项了解各参数的作用\n    )\n)\n\nresult = model.transcribe(\"audio_file.wav\", decoding_config=config)\n\nprint(result.sentences)\n```\n\n使用局部注意力：\n\n```py\nfrom parakeet_mlx import from_pretrained\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nmodel.encoder.set_attention_model(\n    \"rel_pos_local_attn\", # 遵循 NeMo 的命名规范\n    (256, 256),\n)\n\nresult = model.transcribe(\"audio_file.wav\")\n\nprint(result.sentences)\n```\n\n指定句子拆分选项：\n\n```py\nfrom parakeet_mlx import from_pretrained, DecodingConfig, SentenceConfig\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\nconfig = DecodingConfig(\n    sentence = SentenceConfig(\n        # 参照 CLI 选项了解各项参数的作用\n        max_words=30, silence_gap=5.0, max_duration=40.0\n    )\n)\n\nresult = model.transcribe(\"audio_file.wav\", decoding_config=config)\n\nprint(result.sentences)\n```\n\n## from_pretrained\n\n使用 `from_pretrained` 会从 Hugging Face 下载模型，并将下载的模型存储在 HF 的 [缓存文件夹](https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Fhuggingface_hub\u002Fen\u002Fguides\u002Fmanage-cache) 中。您可以通过传递 `cache_dir` 参数来指定缓存目录。它会返回 Parakeet 的不同变体，例如：`ParakeetTDT`、`ParakeetRNNT`、`ParakeetCTC` 或 `ParakeetTDTCTC`。对于一般用途，通常使用 `BaseParakeet` 抽象即可。然而，如果您需要调用特定变体的方法（如 `.decode()`），并希望避免 linter 报错，可以使用 `typing.cast`。\n\n## 时间戳结果\n\n- `AlignedResult`: 顶级结果，包含完整文本和句子\n  - `text`: 完整转录文本\n  - `sentences`: `AlignedSentence` 列表\n- `AlignedSentence`: 句子级别的对齐信息，包含开始和结束时间\n  - `text`: 句子文本\n  - `start`: 开始时间（秒）\n  - `end`: 结束时间（秒）\n  - `duration`: 从 `start` 到 `end` 的持续时间。\n  - `tokens`: `AlignedToken` 列表\n- `AlignedToken`: 词\u002F标记级别的对齐信息，包含精确的时间戳\n  - `text`: 标记文本\n  - `start`: 开始时间（秒）\n  - `end`: 结束时间（秒）\n  - `duration`: 从 `start` 到 `end` 的持续时间。\n\n## 流式转录\n\n对于实时转录，可以使用 `transcribe_stream` 方法创建流式上下文：\n\n```py\nfrom parakeet_mlx import from_pretrained\nfrom parakeet_mlx.audio import load_audio\nimport numpy as np\n\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\n# 创建流式上下文\nwith model.transcribe_stream(\n    context_size=(256, 256),  # (左文上下文, 右文上下文) 帧数\n) as transcriber:\n    # 模拟实时音频片段\n    audio_data = load_audio(\"audio_file.wav\", model.preprocessor_config.sample_rate)\n    chunk_size = model.preprocessor_config.sample_rate  # 每1秒一个片段\n\n    for i in range(0, len(audio_data), chunk_size):\n        chunk = audio_data[i:i+chunk_size]\n        transcriber.add_audio(chunk)\n\n        # 获取当前转录结果\n        result = transcriber.result\n        print(f\"当前文本: {result.text}\")\n\n        # 访问已完成和草稿标记\n        # transcriber.finalized_tokens\n        # transcriber.draft_tokens\n```\n\n### 流式参数\n\n- `context_size`: 元组形式的 (左文上下文, 右文上下文)，用于注意力窗口\n  - 控制模型在当前位置前后查看多少帧\n  - 默认值：(256, 256)\n\n- `depth`: 在分块之间保持精确计算的编码器层数\n  - 控制有多少层能够与非流式前向传播保持完全等价\n  - depth=1: 只有第一层编码器与非流式计算完全一致\n  - depth=2: 前两层完全一致，依此类推\n  - depth=N (总层数): 与非流式前向传播完全等价\n  - 层次越高，与非流式模式的计算一致性越强\n  - 默认值：1\n\n- `keep_original_attention`: 是否保留原始注意力机制\n  - False: 转为局部注意力以适应流式处理（推荐）\n  - True: 保留原始注意力（不太适合流式处理）\n  - 默认值：False\n\n## 低级 API\n\n若要直接转录音频的对数梅尔谱，可以按以下步骤操作：\n\n```python\nimport mlx.core as mx\nfrom parakeet_mlx.audio import get_logmel, load_audio\nfrom parakeet_mlx import DecodingConfig\n\n# 手动加载并预处理音频\naudio = load_audio(\"audio.wav\", model.preprocessor_config.sample_rate)\nmel = get_logmel(audio, model.preprocessor_config)\n\n# 生成带对齐信息的转录\n# 接受 [batch, sequence, feat] 和 [sequence, feat] 形式的输入\n# `alignments` 是 AlignedResult 列表。（无论是否输入批次维度都适用！）\nalignments = model.generate(mel, decoding_config=DecodingConfig())\n```\n\n## 待办事项\n\n- [X] 添加 CLI 以提高易用性\n- [X] 增加对其他 Parakeet 变体的支持\n- [X] 实现流式输入（通过 `transcribe_stream` 进行实时转录）\n- [ ] 提供增强选定词语准确性的选项\n- [ ] 支持带有连续上下文的分块处理（部分已通过流式处理实现）\n\n## 致谢\n\n- 感谢 [Nvidia](https:\u002F\u002Fwww.nvidia.com\u002F) 训练这些优秀的模型、撰写精彩的论文，并提供了出色的实现。\n- 感谢 [MLX](https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx) 项目，正是它提供的框架使得本次实现成为可能。\n- 感谢 [audiofile](https:\u002F\u002Fgithub.com\u002Faudeering\u002Faudiofile) 和 [audresample](https:\u002F\u002Fgithub.com\u002Faudeering\u002Faudresample)、[numpy](https:\u002F\u002Fnumpy.org)、[librosa](https:\u002F\u002Flibrosa.org) 等在音频处理方面的贡献。\n- 感谢 [dacite](https:\u002F\u002Fgithub.com\u002Fkonradhalas\u002Fdacite) 在配置管理方面的支持。\n\n## 许可证\n\nApache 2.0","# Parakeet MLX 快速上手指南\n\nParakeet MLX 是 NVIDIA Parakeet 自动语音识别（ASR）模型在 Apple Silicon 芯片上的 MLX 实现，专为 macOS 用户打造高效的本地语音转文字体验。\n\n## 环境准备\n\n- **操作系统**：macOS (需配备 Apple Silicon 芯片，如 M1\u002FM2\u002FM3 系列)\n- **前置依赖**：\n  - 必须安装 `ffmpeg`，否则命令行工具无法正常工作。\n  - 推荐使用 [uv](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F) 进行包管理（也可使用 pip）。\n\n安装 ffmpeg (使用 Homebrew):\n```bash\nbrew install ffmpeg\n```\n\n## 安装步骤\n\n### 方式一：使用 uv（推荐）\n\n安装库：\n```bash\nuv add parakeet-mlx -U\n```\n\n安装命令行工具：\n```bash\nuv tool install parakeet-mlx -U\n```\n\n### 方式二：使用 pip\n\n```bash\npip install parakeet-mlx -U\n```\n\n> **提示**：国内开发者若遇到下载慢的问题，可配置 pip\u002Fuv 使用国内镜像源（如清华源、阿里源）。\n\n## 基本使用\n\n### 1. 命令行 (CLI) 快速转录\n\n最简单的用法是直接传入音频文件（支持 WAV, MP3 等格式）：\n\n```bash\nparakeet-mlx audio.mp3\n```\n\n**常用示例**：\n- 转录多个文件并生成带时间戳的 VTT 字幕：\n  ```bash\n  parakeet-mlx *.mp3 --output-format vtt --highlight-words\n  ```\n- 生成所有可用格式的输出：\n  ```bash\n  parakeet-mlx audio.mp3 --output-format all\n  ```\n\n### 2. Python API 快速调用\n\n在 Python 脚本中加载模型并转录文件：\n\n```py\nfrom parakeet_mlx import from_pretrained\n\n# 加载模型\nmodel = from_pretrained(\"mlx-community\u002Fparakeet-tdt-0.6b-v3\")\n\n# 执行转录\nresult = model.transcribe(\"audio_file.wav\")\n\n# 输出文本\nprint(result.text)\n```\n\n**获取带时间戳的句子信息**：\n```py\nprint(result.sentences)\n# 输出示例：[AlignedSentence(text=\"Hello World.\", start=1.01, end=2.04, ...)]\n```","一位独立开发者需要在配备 M2 芯片的 MacBook Pro 上，快速将数十个线下技术分享会的录音文件转为带时间轴的字幕，以便制作视频教程。\n\n### 没有 parakeet-mlx 时\n- **硬件闲置与成本浪费**：无法利用 Apple Silicon 强大的神经网络引擎，被迫租用昂贵的云端 GPU 实例进行转录，增加了项目预算。\n- **隐私数据泄露风险**：必须将未处理的原始会议录音上传至第三方在线服务，对于涉及内部技术细节的内容存在合规隐患。\n- **工作流割裂低效**：需要手动安装复杂的 Python 依赖环境，且难以在本地命令行中批量处理多个音频文件或自定义输出格式（如 SRT\u002FVTT）。\n- **长音频处理困难**：面对超过一小时的录音，普通本地模型容易显存溢出崩溃，缺乏智能分块和重叠处理机制。\n\n### 使用 parakeet-mlx 后\n- **极致本地性能**：直接调用 MLX 框架驱动 M2 芯片，转录速度大幅提升，无需联网即可完成高质量识别，彻底省去云服务费。\n- **数据完全可控**：所有音频处理均在本地离线完成，敏感的技术讨论内容无需离开设备，完美满足隐私安全要求。\n- **命令行一键批量**：通过简单的 `parakeet-mlx *.mp3 --output-format srt` 命令即可批量生成带词级时间戳的字幕，无缝集成到现有脚本中。\n- **长音频稳定运行**：内置的智能分块（chunking）与重叠（overlap）机制，轻松处理数小时的连续录音，自动避免内存溢出错误。\n\nparakeet-mlx 让苹果用户能在本地以零成本、高隐私的方式，获得媲美云端的专业级语音转写体验。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fsenstella_parakeet-mlx_614fe79f.png","senstella","Senstella","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fsenstella_d0a63b62.jpg",null,"senstella01@gmail.com","https:\u002F\u002Fgithub.com\u002Fsenstella",[82],{"name":83,"color":84,"percentage":85},"Python","#3572A5",100,898,52,"2026-04-17T23:02:48","Apache-2.0","macOS","不需要独立 GPU，依赖 Apple Silicon (M1\u002FM2\u002FM3 等) 芯片利用 MLX 框架进行加速","未说明 (取决于模型大小，0.6B 版本建议 8GB+ 统一内存)",{"notes":94,"python":95,"dependencies":96},"1. 必须安装 ffmpeg，否则命令行工具无法正常工作。2. 该工具专为 Apple Silicon 架构设计，使用 MLX 框架，不支持 Linux 或 Windows 上的 NVIDIA GPU。3. 首次运行会从 Hugging Face 下载模型文件。4. 推荐使用 uv 进行安装和管理。","未说明 (需支持 uv 或 pip 安装)",[97,98,99,100,101,102,103,104],"mlx","ffmpeg","numpy","huggingface_hub","audiofile","audresample","librosa","dacite",[47,14],"2026-03-27T02:49:30.150509","2026-04-18T22:33:49.505182",[109,114,119,124,129,134],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},40554,"如何实现麦克风实时语音流式转录？","可以使用 `pyaudio` 配合模型的 `transcribe_stream()` 上下文管理器来实现。以下是一个完整的示例代码：\n\n```python\nimport mlx.core as mx\nimport parakeet_mlx\nimport pyaudio\nimport numpy as np\n\nmodel = parakeet_mlx.from_pretrained(\"senstella\u002Fparakeet-tdt-0.6b-v2-mlx\")\n\n# 设置输入大小为 1.5 秒的音频数据\nINPUT_SIZE = int(model.preprocessor_config.sample_rate * 1.5)\n\np = pyaudio.PyAudio()\n\nstream = p.open(\n    format=pyaudio.paFloat32,\n    channels=1,\n    rate=model.preprocessor_config.sample_rate,\n    input=True,\n    frames_per_buffer=INPUT_SIZE,\n)\n\nwith model.transcribe_stream() as transcriber:\n    while True:\n        data = stream.read(INPUT_SIZE, exception_on_overflow=False)\n        audio_data = np.frombuffer(data, dtype=np.float32)\n        audio_array = mx.array(audio_data)\n\n        transcriber.add_audio(audio_array)\n\n        result = transcriber.result.text\n        if result.strip():\n            print(f\"{result}\", end=\"\", flush=True)\n\nstream.stop_stream()\nstream.close()\np.terminate()\n```\n注意：由于子采样层的 2D 卷积特性，流式转录与完整前向传播可能存在细微差异，建议避免提供过小的音频块（如 100ms）。","https:\u002F\u002Fgithub.com\u002Fsenstella\u002Fparakeet-mlx\u002Fissues\u002F12",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},40555,"使用默认 CLI 参数转录时，为什么在音频块交界处会出现乱码或损坏的 token？","这是一个已知问题，通常发生在技术性强或复杂的音频内容中，表现为单词拼写错误（如 `dovovaovaust`）。主要原因可能是解码器隐藏状态漂移以及大块重叠合并时的数值稳定性问题。\n\n解决方案：\n1. **减小音频块大小和重叠部分**：尝试使用更小的块（例如 10 秒）和较小的重叠（例如 2 秒），这能显著减少状态累积和漂移。\n2. **更新依赖**：确保使用最新版本的 `mlx`（如 0.26.3 或更高），新版本可能修复了相关的数值稳定性问题。\n3. **测试不同精度**：虽然 `--fp32` 有时被提及，但测试表明在非 fp32 模式下最新版本也能正常工作。","https:\u002F\u002Fgithub.com\u002Fsenstella\u002Fparakeet-mlx\u002Fissues\u002F27",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},40556,"该模型能否用于文本 - 音频对齐（如替换 VITS 中的单调对齐搜索）？","不太推荐直接使用。虽然理论上可行，但 Transformer 架构（如 LLM）相比专为 TTS 设计的 VITS 架构，缺乏特定的“归纳偏置”（inductive biases）。\n\n具体原因：\n- VITS 显式建模了语音生成的各个组件（如时长和对齐），而通用 Transformer 需要更多的数据和训练资源才能学会这些模式。\n- 如果参数量相同（例如均为 1 亿），VITS 能更好地学习音素与音频编码 token 之间的关系，而 LLM 可能需要海量数据才能达到类似效果。\n- 如果您的数据集较小（例如只有 25 小时），直接使用 LLM 进行对齐训练效果可能不如 VITS。建议继续使用 VITS 处理对齐，或寻找专门针对此任务优化的模型。","https:\u002F\u002Fgithub.com\u002Fsenstella\u002Fparakeet-mlx\u002Fissues\u002F25",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},40557,"基于麦克风的语音识别速度和准确度不如预期，是否需要优化代码？","目前的优化空间和准确度提升已达到瓶颈。如果您发现响应不够及时或准确度不如 `parakeet-tdt-0.6b-v2-mlx` 模型的其他实现，这可能与模型本身的流式特性有关。\n\n建议：\n1. **接受当前限制**：维护者表示该问题的优化已达上限，相关 Issue 已关闭。\n2. **尝试其他模型**：对于需要固定延迟的流式 ASR 场景，可以考虑 Kyutai 的最新 ASR 模型，它专为流式设计，具有 500ms\u002F2.5 秒的固定延迟，且据称也有 MLX 实现，可能更适合您的用例。\n3. **参考社区工具**：有用户基于此开发了更生产就绪的 CLI 工具（如 `birdstream`），可以查看其实现是否有所改进。","https:\u002F\u002Fgithub.com\u002Fsenstella\u002Fparakeet-mlx\u002Fissues\u002F22",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},40558,"如何获得更好的词级时间戳输出，避免单词被拆分到多个片段中？","原生的词级时间戳输出可能会将一个单词拆分成多个带有下划线标记的部分（例如 `\u003Cu>M\u003C\u002Fu>y`, `M\u003Cu>y\u003C\u002Fu>`）。\n\n虽然目前库本身可能未直接提供自动合并功能，但用户可以通过后处理脚本来优化输出：\n1. **解析 SRT\u002FVTT 输出**：读取生成的字幕文件。\n2. **合并逻辑**：检测相邻片段中是否包含同一单词的碎片（通常通过检查 HTML 标签 `\u003Cu>` 或字符连续性）。\n3. **重组时间戳**：将属于同一个完整单词的所有片段的时间戳合并，起始时间取第一个片段的开始，结束时间取最后一个片段的结束。\n\n社区中有用户通过自定义脚本实现了这一功能，将类似 `My \u003Cu>b\u003C\u002Fu>reakfast` 和 `My b\u003Cu>re\u003C\u002Fu>akfast` 的片段合并为完整的 `breakfast` 条目。","https:\u002F\u002Fgithub.com\u002Fsenstella\u002Fparakeet-mlx\u002Fissues\u002F5",{"id":135,"question_zh":136,"answer_zh":137,"source_url":113},40559,"流式转录在处理小音频块时为什么会与完整转录结果不一致？","这是由于模型架构中的子采样层使用了 2D 卷积。在处理非常小的音频块（例如 100ms）时，卷积操作所需的上下文信息不足，导致流式转录结果与完整前向传播（full forward pass）存在细微差异。\n\n解决方案：\n- **增大音频块大小**：尽量避免提供过小的音频块。建议使用至少 1.5 秒或更大的音频块（如示例代码中的 `INPUT_SIZE` 设置），以最小化这种影响。\n- 维护者表示未来可能会修复此问题，但在当前版本中，调整输入块大小是最有效的规避方法。",[]]