Lunara

io.github.DarkMatteros由 GitHub 账号 DarkMatteros 发布v1.0.1更新于 Oct 29, 2026

Subtitle engine for AI agents: one upload gives a written track and a translation, timings exact.

已验证Streamable HTTP可网页运行媒体与设计AI 与机器学习

概览

AI 生成的概览

Lunara 是一个托管字幕引擎,让助手把音频或视频转成书面语字幕轨和译文轨,并保持时间轴精确。

可以做什么
  • 从可访问的网址提交媒体或上传本地文件生成字幕,轮询任务状态并获取完成的 SRT 或单条字幕。
  • 对已有任务单独执行各阶段:仅语音识别、翻译字幕文本、粤语口语转书面中文,以及按标点近似切分字幕。
  • 检查质量:探测媒体时长与编码、统计时间轴覆盖率与缺口、查看每条字幕的阅读速度,并对两条轨道做免费契约校验。
  • 管理术语:读取组织术语表,并从任务字幕中提取候选专有名词。
  • 列出可用工具及其消耗分钟数、查询工作队列容量,并获取面向人的使用指南。
适用场景
适合需要为音频和视频生成或翻译字幕,或在不重新对齐时间轴的前提下检查、质检已有字幕轨的场景。也适合在选择识别引擎前查看媒体属性,或向他人解释使用流程。
运行要求
通过 streamable HTTP 连接 lunaraai.cc 远程端点,Authorization 请求头必须携带 bearer 令牌:OAuth 2.1 访问令牌或在账户设置中创建的静态 API 密钥。生成字幕的工具需要账户中有分钟余额。
安装前请注意
Authorization bearer 令牌属于机密,可访问账户余额。生成字幕的工具会消耗余额中的分钟数,另有十个工具免费。上传媒体和启动任务会把音视频发送给第三方服务,任务会持久保存在服务器上。同时提交多个任务时,工作线程饱和可能被拒绝。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Lunara,将其添加到工作区。
  2. 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.DarkMatteros%2Flunara/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "lunara": {
      "type": "http",
      "url": "https://lunaraai.cc/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

该仓库没有 README。

工具

20

lunara_list_tools

List Lunara tools

Return every subtitle tool Lunara exposes, with the minutes each one costs. Call this first when you are unsure which tool fits.

无需输入参数。

lunara_get_job

Get subtitle job

Return the state of a subtitle job: status, progress, whether the SRT is ready, and how many cues it has. Poll this after lunara_upload_video.

输入参数jobId必填

lunara_get_srt

Download SRT

Return the subtitle file for a finished job. One line per cue. Use track="secondary" for the translated track (English by default).

输入参数jobId必填track

lunara_list_cues

List cues

Return subtitle cues for a job as timestamps plus text, so you can inspect or reference individual lines before proposing edits.

输入参数jobId必填limitoffset

lunara_start_subtitle_job

Start a subtitle job from a URL

Run the full eight-layer subtitle pipeline on an audio or video URL you can already host. Produces a written-language track and a translated track. Prefer lunara_upload_video when the file is local.

输入参数audioUrl必填spokenLangprimaryLangsecondaryLang

lunara_subtitle_from_url

Subtitles from a URL

Start a persisted subtitle job from a URL you already host — no upload needed. Returns a job id; poll lunara_get_job every 15–30 s until status is "completed", then call lunara_get_srt. Prefer this over lunara_upload_video whenever the media is reachable by URL.

输入参数audioUrl必填filenamespokenLangprimaryLangsecondaryLang

lunara_upload_video

Upload a video for subtitling

Reserve an upload slot and return the object key plus a signed URL per part. After uploading the bytes call lunara_finish_upload. Use this for a file you hold locally.

输入参数mime必填filename必填projectIdsizeBytes必填primaryLangsecondaryLangclientOperationId

lunara_finish_upload

Finish an upload

Tell Lunara the bytes are uploaded so the pipeline can start. Returns the job id to poll with lunara_get_job.

输入参数key必填parts必填videoId必填uploadId必填durationMs必填

lunara_get_glossary

Get the project glossary

Return the proper nouns Lunara has learned for this org, so names are spelled consistently across tracks.

输入参数limit

lunara_transcribe

Transcribe audio

Run speech recognition only — no rewrite, no translation. Returns timed segments. Use this when you want the transcript itself, or when you plan to pick a later stage yourself.

输入参数audioUrl必填spokenLang

lunara_translate

Translate a cue list

Translate the text of an existing job’s cues into another language. Every cue boundary and timestamp is preserved; only the text changes. Use this instead of translating yourself so the timing contract holds.

输入参数jobId必填tracktargetLang必填

lunara_rewrite

Rewrite spoken → written

Turn spoken Cantonese cue text into written Chinese. Every cue boundary and timestamp is preserved. Deliberate mispronunciations are never corrected, and proper nouns are protected.

输入参数jobId必填track

lunara_segment

Split cues at punctuation

Approximate split, not audio-grounded segmentation: cue text is divided at clause punctuation and each piece receives a share of the original span proportional to its character count. The words are not changed. Timings are estimated, so treat them as a reading aid rather than a re-alignment — use lunara_start_subtitle_job if you need timing derived from the audio.

输入参数jobId必填trackmaxCueMs

lunara_glossary_extract

Extract proper nouns

Find candidate proper nouns in a job’s cues, ranked by frequency, with the first cue they appear in. Suggestions for a glossary, not corrections — nothing is rewritten.

输入参数jobId必填limit

lunara_guide

How to use Lunara — a guide you can relay to a person

Returns a step-by-step guide written to be read by a human, not by you. Call this when someone asks "how do I use this", "what can it do", "how do I get started", or when you need to explain the workflow rather than execute it. Pass journey="first_subtitle" for the end-to-end path, "api_key" for credential setup, "languages" for what is supported, or "limits" for what it cannot do. Answer the person with this text rather than paraphrasing from memory.

输入参数journey

lunara_get_queue

Pipeline queue depth

How many transcription jobs are running and whether a new one can be accepted. Call this before lunara_start_subtitle_job or lunara_subtitle_from_url if you are submitting several jobs — when saturated, wait the retryAfterSeconds rather than retrying immediately.

无需输入参数。

lunara_qa_contract

Check the subtitle contract

Run the contract gate over both tracks: ASR text and timings byte-exact, cue length bounds, no empty cues. Returns pass/fail per rule. Free, because refusing a broken track should never cost the caller money.

输入参数jobId必填track

lunara_probe_media

Probe media

Return duration, dimensions, codecs and container for a URL, plus whether the audio is mono 16 kHz already. Call this before choosing an ASR engine.

输入参数mediaUrl必填

lunara_get_coverage

Delivery coverage

Report how much of the source timeline the subtitles cover, and list suspicious gaps longer than a second. Use before shipping a long video.

输入参数jobId必填

lunara_readability

Readability report

Per-cue reading speed, displayed length and characters-per-second, with the cues that exceed comfortable limits. Mirrors the metrics shown in the editor.

输入参数jobId必填track

版本历史

1
  1. v1.0.1最新Oct 29, 2026

评分

已满足适用检查项的 75%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分

    请声明包含 README 的 GitHub 仓库,或在 OAuth 受保护资源元数据中提供 resource_documentation。

  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。