{"name":"io.github.Open-Cosmic-Software/nyxmix","slug":"open-cosmic-software-nyxmix","title":null,"description":"Agent-first multitrack audio editor: edit sessions live with a human watching.","url":"https://mcp.market/server/open-cosmic-software-nyxmix","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"ai","tags":["ai","media"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":37,"last_push_at":"2026-10-18T11:00:30.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Open-Cosmic-Software/nyxmix","website":null,"version":"0.1.0","remotes":[],"packages":[{"registryType":"npm","identifier":"nyxmix","version":"0.1.0","transport":{"type":"streamable-http","url":"http://127.0.0.1:3950/mcp"},"environmentVariables":[{"description":"Bearer token required for API/MCP access (recommended when reachable by others)","isSecret":true,"name":"NYXMIX_TOKEN"},{"description":"Folder for sessions and audio (default ~/.nyxmix)","name":"NYXMIX_DATA"}]}],"tools":[{"name":"analyze","description":"Measure audio: EBU R128 loudness (integrated LUFS, LRA, true peak), sample peak/RMS/clipping/DC, silent stretches, spectral band balance, optional RMS envelope.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_lv2_plugin","description":"Run a native LV2 or VST3 effect plugin over an asset on the server (destructive, like process_audio): creates a new asset and, by default, swaps it into every clip using the original (one undo step; undo restores the original). Length is kept; mono assets stay mono (stereo plugins get a dual-mono feed and are folded back), stereo assets stay stereo (mono plugins run per channel). Plugin latency is","write_action":true,"price_micros":0,"input_schema":null},{"name":"apply_user_preset","description":"Add a saved preset's effects to a track (or the master). replace:true clears the chain first. One undo step.","write_action":false,"price_micros":0,"input_schema":null},{"name":"archive_url","description":"Get a download URL for a .nyxmix archive of the session (project, lossless audio, transcripts, versions, and the custom plugins it uses) — for backups or moving the session to another NyxMix server, where POST /api/projects/import restores it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"auto_duck","description":"Lower a music/bed track automatically wherever the voice tracks are speaking. Writes volume automation on the music track (replacing its existing volume automation) — one undoable step; the human can fine-tune the points afterwards. Returns the detected speech regions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"batch_process","description":"Run one destructive process (see process_audio kinds, e.g. loudness, denoise, voiceDenoise, declip) on several files — by default every file used on the timeline. Each result is swapped into its clips when the length stays the same. Returns per-file results.","write_action":true,"price_micros":0,"input_schema":null},{"name":"check_delivery","description":"Check the mix against a delivery spec and get pass/fail per criterion with a concrete fix for each failure. Standards: ${Object.entries(STANDARDS).map(([k, v]) =>","write_action":false,"price_micros":0,"input_schema":null},{"name":"convert_sample_rate","description":"Change the session sample rate (44100, 48000, 88200, 96000): every file is resampled with SoX (high quality); clip times and the arrangement stay the same. Not undoable — save_version first if unsure.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_project","description":"Create an empty session.","write_action":true,"price_micros":0,"input_schema":null},{"name":"cut_transcript","description":"Remove spoken words from the edit by text — like deleting them in a document. Give EITHER text (an exact phrase from get_transcript; case and punctuation are ignored; if it occurs more than once you must pass occurrence = 1-based index or \"all\") OR ranges [{start,end}] in timeline seconds (cut exactly as given) OR words [{start,end,trackId?}] copied from get_transcript format \"words\". Word cuts ge","write_action":true,"price_micros":0,"input_schema":null},{"name":"describe_capabilities","description":"Effect types with parameter ranges, destructive processes, and export formats.","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_scene_changes","description":"Find shot changes / hard cuts in the video (ffmpeg scene score). Returns timeline times — handy for cutting or crossfading audio exactly on picture cuts, or dropping markers there. threshold 0–1 (default 0.35; lower finds softer changes).","write_action":false,"price_micros":0,"input_schema":null},{"name":"edit","description":"Apply several operations atomically (all or nothing, one undo step). Ops: …. Each op tool documents its args. Pass ifRev to fail instead of clobbering concurrent human edits.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_cd","description":"Export a CD image (Audition: CD Layout): 44.1 kHz/16-bit dithered WAV plus a CUE sheet. Every labelled marker starts a CD track (titles from labels, min 4 s apart, up to 99). Burn the .cue with any burning program.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_audio","description":"Create audio in the bin (Audition's Generate menu): kind \"speech\" (text → voice, local TTS; voices: …; speed 0.5–2), \"tone\" (frequency, waveform sine/square/triangle/sawtooth), \"noise\" (white/pink/brown — e.g. to fill a cut with room-like noise), \"silence\". level in dBFS (default -18), duration in seconds. place:{trackId?, start} also puts it on the timeline (new track if no trackId). Useful for p","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_activity","description":"Recent edits with author (human or agent) — use it to see what the human changed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_image","description":"Render a waveform or spectrogram PNG of the mix, an asset or a clip, so you can look at the audio.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_pitch","description":"Fundamental-frequency (pitch) track of an asset, measured with YIN every 10 ms on a mono mix. Returns a summary (medianHz, minHz/maxHz after a 5-frame median so single octave slips do not count, p10Hz/p90Hz, voicedFraction, meanConfidence) and the track as [t, hz|null, confidence] decimated to maxPoints (default 120; median of the voiced frames per point). Use it to check a voice (typical speaking","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_project","description":"Read the session: tracks, clips (with times), effects, assets, markers. format \"summary\" (default) is compact text; \"json\" is the full document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_transcript","description":"Read the TIMELINE transcript: words from every clip on unmuted tracks, mapped to timeline seconds (so it reflects all edits; re-read after cutting, because later times shift). format \"text\" (default): one line per phrase, \"[start–end] words…\" (with \"Track:\" when several tracks speak), filler words shown as ‹um›, low-confidence words suffixed with ~. format \"words\": JSON {words:[{start,end,word,pro","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_video","description":"The session's reference video: name, duration, size, fps, offset (timeline seconds where frame 0 sits) and the soundtrack asset id. Timeline time = offset + video time.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_audio","description":"Add an audio file to the session bin from a public URL or base64 data. Any common format; converted losslessly to 32-bit float at the project rate. Returns the asset (id, duration). Then place it with clip.add.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_video","description":"Attach a reference video to the session (one per session; a new one replaces the old) so audio can be cut to picture. Give a public URL or base64 data. NyxMix makes a browser proxy and a filmstrip, and extracts the soundtrack into the bin as an asset (audioAssetId). place:true also adds a \"Video sound\" track with the soundtrack clip at the video offset. Slow for long videos (it transcodes).","write_action":false,"price_micros":0,"input_schema":null},{"name":"install_faust_plugin","description":"Install a real-time effect written in Faust (https://faust.grame.fr), compiled to WebAssembly on the server. Example: import(\"stdfaust.lib\"); cutoff = hslider(\"cutoff [unit:Hz]\", 2000, 50, 18000, 1); process = par(i, 2, fi.lowpass(4, cutoff)); Every hslider/vslider/nentry/checkbox/button becomes a parameter named after its label in camelCase (e.g. \"Wet Dry\" → wetDry) with the Faust min/max/init. A","write_action":false,"price_micros":0,"input_schema":null},{"name":"install_plugin","description":"Install a custom real-time effect: manifest {id, label, description, params:{name:{minimum,maximum,default,unit}}} plus code = an AudioWorklet module that calls registerProcessor(\"plugin-<id>\", Class) with one k-rate AudioParam per param. It is test-rendered before it is accepted, then usable everywhere as effect type \"plugin:<id>\" (preview and export). Only works if the operator enabled plugins.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_lv2_plugins","description":"Search the native effect plugins installed on the server — LV2 and VST3 (LSP, x42, Calf, ZAM, Dragonfly, DISTRHO, MDA, …: EQs, compressors, limiters, gates, reverbs, delays, filters, distortion, modulation, stereo tools). They run server-side as destructive processes via apply_lv2_plugin. Filter by free text (all words must match name/brand/category/uri) and/or category; with no filters returns ca","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_plugins","description":"Installed effect plugins (use them with effect.add type \"plugin:<id>\") and whether installing is enabled here.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"List editing sessions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_proposals","description":"Proposals for a session with their status (open, accepted, rejected) and who decided.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_user_presets","description":"Presets people and agents have saved (built-in ones are applied with preset_apply).","write_action":false,"price_micros":0,"input_schema":null},{"name":"lv2_plugin_info","description":"Controls of one LV2 or VST3 plugin (by uri or #index from list_lv2_plugins): symbol, label, range, unit, default, toggles and enumerations. Pass values by symbol in apply_lv2_plugin.controls; anything not passed keeps its default.","write_action":false,"price_micros":0,"input_schema":null},{"name":"noise_reduction","description":"Noise-print noise reduction (like Audition's Capture Noise Print + Noise Reduction). Best for steady noise: hiss, fan, air-con, hum, room tone. Give start/end of a stretch that contains ONLY the noise (room tone before someone speaks, ≥ 0.1 s, ideally 0.5–2 s): the print is learned from it, stored on the asset, and applied to the whole asset in one call. Without start/end the stored print of this ","write_action":false,"price_micros":0,"input_schema":null},{"name":"pitch_curve","description":"Manual pitch correction: shift a voice by a curve of points {time (asset/source seconds), cents} — linear between points, 0 outside, so put 0-cent points around the part you fix. E.g. a note 30 cents flat from 12.40–12.90 s: [{time:12.3,cents:0},{time:12.4,cents:30},{time:12.9,cents:30},{time:13.0,cents:0}]. Use get_pitch first to see where the voice is off. Formants are kept (WORLD vocoder); only","write_action":false,"price_micros":0,"input_schema":null},{"name":"process_audio","description":"Destructive processing of an asset into a new asset. Kinds: ${Object.entries(PROCESSES).map(([k, v]) =>","write_action":false,"price_micros":0,"input_schema":null},{"name":"propose_edits","description":"Suggest a batch of edits WITHOUT applying them. The human hears a preview and accepts or rejects it in the UI. Use this for anything subjective or destructive-feeling (big cuts, re-ordering, heavy processing choices) or when the human asked to review first. Same op format as `edit`. label = one line the human reads; rationale = why (short). Returns the proposal; check its status later with list_pr","write_action":false,"price_micros":0,"input_schema":null},{"name":"redo","description":"Redo.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remix_music","description":"Make a music clip fit a target length by jumping between musically similar beats (like Audition's Remix) instead of stretching: tempo and pitch stay untouched. Result is ordinary clips with crossfades at the jumps (one undo step), so a human can adjust them. Typical use: fit a bed to an episode or a 30 s ad. Returns the achieved length (within about a beat of the target).","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_filler_words","description":"Find filler words in the timeline transcript. By default the list follows each recording's detected language (${Object.entries(FILLERS_BY_LANG).map(([k, v]) =>","write_action":true,"price_micros":0,"input_schema":null},{"name":"render","description":"Export the mix. Returns a download URL plus measured loudness. bounce:true instead adds the mixdown to the bin as a new asset.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_preset","description":"Save the effect chain of a track (or the master, without trackId) as a named preset that works in every session — e.g. after dialling in a voice sound the human likes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_version","description":"Save a named snapshot of the session (e.g. before a risky pass) that the human can return to.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_video_offset","description":"Slide the video against the timeline: offset = timeline seconds where the video starts. Does not move audio clips (move the soundtrack clip with clip.move if they should stay in sync).","write_action":false,"price_micros":0,"input_schema":null},{"name":"spectral_edit","description":"Audition-style spectral editing of an asset on a time × frequency region. The region is ONE of: a box (start, end, optional lowHz/highHz); a lasso polygon ([[t, hz], …], for shapes that follow a sweep or a slanted chirp); or brush strokes ({points:[[t, hz], …], radiusMs, radiusSemitones}, for painting along a whistle, a harmonic or onto single clicks). action \"attenuate\" scales the region by gainD","write_action":false,"price_micros":0,"input_schema":null},{"name":"spectral_image","description":"Look at an asset's spectrogram rendered by NyxMix's own STFT, with an exact pixel → (time, Hz) mapping (returned as text next to the image) so you can read off rectangles for spectral_edit. Log-frequency axis (bottom = minHz, top = maxHz), no axis decorations. With clipId and no start/end, shows the clip's source window. …","write_action":false,"price_micros":0,"input_schema":null},{"name":"stretch_clip","description":"Time-stretch one clip to an exact length (duration in seconds) or by a ratio, keeping its pitch (Rubber Band, high quality) — e.g. fit a music bed to 30.0 s. Creates a new file and points the clip at it; one undo step.","write_action":false,"price_micros":0,"input_schema":null},{"name":"transcribe","description":"Speech-to-text with word-level timestamps (Whisper, runs locally). Transcribes one asset, or (without assetId) every asset used on the timeline that has no transcript yet. Results are cached per asset, so calling again is cheap; force:true re-runs. Same-length processed copies (denoise etc.) reuse their source's transcript. Takes roughly 0.1–0.3× the audio length; the first run also downloads the ","write_action":false,"price_micros":0,"input_schema":null},{"name":"undo","description":"Undo the last edit (by anyone).","write_action":false,"price_micros":0,"input_schema":null},{"name":"video_frame","description":"Look at the picture: returns the video frame at a timeline time as a JPEG image (e.g. to check who is on screen, or find where a shot changes before cutting the audio there).","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-10-28T05:56:37.072Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-28T05:56:36.964Z","components":{"code":{"score":20,"max":25,"notes":["58 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"fs.traversal","severity":"medium","component":"code","title":"Path built from user input without normalization","evidence":"server/index.js: …ams.id).name; try { name = JSON.parse(readFileSync(path.join(store.rendersDir(req.params.id), req.params.file.replace(/\\.[a-z0-9…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"nyxmix","version":"0.1.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-10-18T10:50:57.994Z","repositoryUrl":"git+https://github.com/Open-Cosmic-Software/nyxmix.git","weeklyDownloads":37}],"repo":{"found":true,"owner":"Open-Cosmic-Software","repo":"nyxmix","archived":false,"pushedAt":"2026-10-18T11:00:30Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/297160538?v=4","ownerCreatedAt":"2026-06-26T12:30:15Z","license":"NOASSERTION"},"icon":{"url":null,"source":"none"},"presence":{"stars":0,"forks":0,"downloadsWeek":37,"license":"NOASSERTION","lastPushAt":"2026-10-18T11:00:30.000Z","score":23}}}},"grade_history":[],"reviews":[]}