Skip to content

Commit 1fb9d31

Browse files
committed
feat: initial v0.1.0 release of multimux
0 parents  commit 1fb9d31

34 files changed

Lines changed: 1872 additions & 0 deletions

.editorconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
indent_style = space
6+
indent_size = 2
7+
end_of_line = lf
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true

.github/workflows/release.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: Release CI
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
release:
13+
runs-on: windows-latest
14+
15+
steps:
16+
- name: Checkout Code
17+
uses: actions/checkout@v4
18+
19+
- name: Setup Node.js
20+
uses: actions/setup-node@v4
21+
with:
22+
node-version: 22
23+
24+
- name: Setup PNPM
25+
uses: pnpm/action-setup@v4
26+
with:
27+
version: 9
28+
29+
- name: Install Dependencies
30+
run: pnpm install
31+
32+
- name: Compile and Package Application
33+
run: pnpm exec electron-builder --win
34+
env:
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
37+
- name: Get Tag Name
38+
id: get_tag
39+
shell: bash
40+
run: echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
41+
42+
- name: Create GitHub Release
43+
uses: softprops/action-gh-release@v2
44+
with:
45+
tag_name: ${{ steps.get_tag.outputs.tag }}
46+
name: Release ${{ steps.get_tag.outputs.tag }}
47+
body: |
48+
## multimux: Master Audio Down-Mixdown Suite v0.1.0
49+
50+
This is the initial release of **multimux**!
51+
52+
### What's New:
53+
- **Tactile Concrete Fader Console**: A beautiful physical mixing board UI to visual balance volume sliders (decibel gains from `-oo` to `+6.0 dB`).
54+
- **Lossless Video Passthrough**: Kept video bitstreams bit-for-bit identical, compiling files in seconds instead of hours.
55+
- **Live CRT Monitor Feedback**: Renders FFmpeg logs and progress in real-time in a vintage green terminal feed.
56+
- **Save Dialog Integration & Explorer Actions**: Open files directly or open directories in Windows Explorer.
57+
files: |
58+
dist/multimux-*.exe
59+
env:
60+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Exclude everything by default
2+
*
3+
4+
# Allow directories
5+
!*/
6+
7+
# Explicitly ignore dependency and build folders (stops recursive allow-list matching)
8+
node_modules/
9+
dist/
10+
out/
11+
.eslintcache
12+
.vscode/
13+
14+
# Allow configuration files
15+
!.gitignore
16+
!.npmrc
17+
!package.json
18+
!tsconfig.json
19+
!tsconfig.node.json
20+
!tsconfig.web.json
21+
!electron.vite.config.ts
22+
!electron-builder.yml
23+
!eslint.config.mjs
24+
!.editorconfig
25+
!.prettierignore
26+
!.prettierrc.yaml
27+
28+
# Allow source files
29+
!src/**
30+
31+
# Allow resources & build configurations
32+
!resources/**
33+
!build/**
34+
35+
# Allow workflows
36+
!.github/**
37+
38+
# Allow documentation
39+
!README.adoc
40+
!CHANGELOG.adoc
41+
!changelog-details/**

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
shamefully-hoist=true

.prettierignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
out
2+
dist
3+
pnpm-lock.yaml
4+
LICENSE.md
5+
tsconfig.json
6+
tsconfig.*.json

.prettierrc.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
singleQuote: true
2+
semi: false
3+
printWidth: 100
4+
trailingComma: none

CHANGELOG.adoc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
= Changelog
2+
:toc: left
3+
4+
This document records the developmental history of multimux.
5+
6+
== Timeline
7+
8+
* link:changelog-details/2026-05-27%20-%20Initial%20v0.1.0%20Release.adoc[2026-05-27 - Initial v0.1.0 Release]
9+
+
10+
Initial release of multimux. Implements the tactile concrete-panel physical audio mixing desk console UI, IPC handlers for ffprobe/ffmpeg analysis and signal processing, allow-listed git settings, and a fully configured GitHub Actions CI/CD release workflow.

README.adoc

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
= multimux: Master Audio Down-Mixdown Suite
2+
:toc: left
3+
:toclevels: 3
4+
:icons: font
5+
:source-highlighter: highlightjs
6+
7+
image::resources/icon.png[multimux Logo, 128, 128, align=center]
8+
9+
A lightweight, elegant, and cross-platform desktop application built in Electron, SolidJS, and TypeScript. multimux allows screen-recorders and video-editors to visually mix down multiple discrete audio tracks from any recording source into a single master track, while preserving the video stream bit-for-bit with instant container-level passthrough (`-c:v copy`).
10+
11+
== Tutorials
12+
13+
=== Scaffolding and Launching the App
14+
15+
To get the application up and running locally, follow these simple steps:
16+
17+
1. Clone this repository to your computer.
18+
2. Open your terminal in the project directory.
19+
3. Install the node packages:
20+
+
21+
[source,bash]
22+
----
23+
pnpm install
24+
----
25+
4. Start the application in developer mode:
26+
+
27+
[source,bash]
28+
----
29+
pnpm run dev
30+
----
31+
5. Use `F12` to toggle the developer console if you want to inspect IPC bridge outputs.
32+
33+
=== Performing Your First Audio Mixdown
34+
35+
Here is how to perform your first mixdown in less than 30 seconds:
36+
37+
1. Launch multimux.
38+
2. Locate your screen recording in your file manager.
39+
3. Drag and drop the file directly onto the recessed **Inlet Port** plate.
40+
4. The console will automatically analyze the streams and display your active channels as physical vertical channel strips.
41+
5. Toggle the channel switches to include or exclude specific tracks.
42+
6. Drag the mechanical fader knobs up or down to balance volumes.
43+
7. Click the heavy mechanical **Mix & Mux Master** push-button at the bottom.
44+
8. Watch the compilation progress and log feed inside the retro green-screen overlay. Once completed, click **Open File Location** to find your mixed recording.
45+
46+
---
47+
48+
== How-To Guides
49+
50+
=== Adjusting Volume Levels (Decibels)
51+
52+
To balance your volume levels:
53+
54+
* Drag the fader knob upwards to boost a track (up to `+6.0 dB`).
55+
* Drag the fader knob downwards to attenuate a track (down to `-oo dB` / Muted).
56+
* To reset a fader knob exactly back to its default volume (`0.0 dB`), double-click the fader knob cap. It will automatically snap to the middle tick.
57+
58+
=== Changing Output Audio Codecs
59+
60+
multimux supports both AAC and Opus output formats:
61+
62+
* Under the *Output Mux Specs* card, select the codec push-button (**AAC** or **OPUS**).
63+
* To select the desired fidelity, adjust the bitrate dropdown menu (ranges from **128k** for fast drafts to **320k** for studio quality).
64+
65+
=== Stripping Audio Tracks Entirely
66+
67+
If you want to strip all audio channels and export a silent video:
68+
69+
1. Disable all channels using their toggles so that every channel says `MUTED`.
70+
2. Click the **Mix & Mux Master** button. The application will automatically call FFmpeg with the `-an` flag, stripping all audio tracks in seconds.
71+
72+
---
73+
74+
== Explanation
75+
76+
=== Under-the-Hood Muxing Mechanics
77+
78+
Screen-recording apps (like OBS or ShadowPlay) capture microphone feeds, gaming sounds, and Discord audio on separate, discrete tracks. While this is great for multi-track editors, standard video players only read Track 1, meaning other tracks go silent when uploaded directly.
79+
80+
multimux bridges this gap. Unlike standard transcoder suites that re-encode the entire video (taking hours and losing visual quality), multimux does two simultaneous things:
81+
82+
1. **Video Stream Copy (`-c:v copy`)**: The video packets are moved bit-for-bit directly from the input container to the output container without any decoding. This process is instantaneous and lossless.
83+
2. **Audio Mixdown (`amix`)**: The chosen audio tracks are decoded into raw floating-point PCM waves. The application applies the customized volume multipliers (sliders), sums the waves together using FFmpeg's `amix` filter, and encodes the resulting master mix into a single stereo track.
84+
85+
==== FFmpeg Filter Graph Example
86+
87+
If CH1 (Desktop) is kept at `1.0` (0dB) and CH3 (Mic) is boosted to `1.5` (+3.5dB), multimux dynamically generates and spawns this exact filter graph:
88+
89+
[source,text]
90+
----
91+
[0:a:0]volume=1.0[a0]; [0:a:2]volume=1.5[a2]; [a0][a2]amix=inputs=2:duration=longest:dropout_transition=0[a]
92+
----
93+
94+
---
95+
96+
== Reference
97+
98+
=== System Requirements
99+
100+
* **Operating System**: Windows 10/11, macOS, or Linux.
101+
* **Backend Utilities**: `ffmpeg` and `ffprobe` must be installed on your system and registered in your system PATH.
102+
103+
=== Build Scripts
104+
105+
The following commands are available in your workspace `package.json`:
106+
107+
* `pnpm run dev`: Launch the desktop app in live hot-reload development.
108+
* `pnpm run build`: Compile TypeScript and build the static assets.
109+
* `pnpm run build:win`: Package the desktop application into a standalone Windows installer (`.exe`) under the `dist/` directory.
110+
111+
---
112+
113+
== Changelog
114+
115+
See detailed timeline logs in link:CHANGELOG.adoc[CHANGELOG.adoc].

build/entitlements.mac.plist

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>com.apple.security.cs.allow-jit</key>
6+
<true/>
7+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
8+
<true/>
9+
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
10+
<true/>
11+
</dict>
12+
</plist>

build/icon.icns

83.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)