Skip to content

Commit 58c42e1

Browse files
committed
v1.0.2: refined presets, metadata edit, yt dl
1 parent a2a999a commit 58c42e1

File tree

9 files changed

+1517
-404
lines changed

9 files changed

+1517
-404
lines changed

.github/workflows/release.yml

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
name: Release
2-
32
on:
43
push:
54
tags:
65
- 'v*'
7-
86
permissions:
97
contents: write
10-
118
env:
129
CARGO_TERM_COLOR: always
13-
1410
jobs:
1511
build:
1612
name: Build ${{ matrix.target }}
@@ -22,68 +18,85 @@ jobs:
2218
target: x86_64-unknown-linux-gnu
2319
binary: lomux
2420
archive: lomux-linux-x64.tar.gz
25-
2621
- os: windows-latest
2722
target: x86_64-pc-windows-msvc
2823
binary: lomux.exe
2924
archive: lomux-windows-x64.zip
30-
3125
- os: macos-latest
3226
target: x86_64-apple-darwin
3327
binary: lomux
34-
archive: lomux-macos-x64.tar.gz
28+
archive: lomux-macos-intel.tar.gz
3529
build_app_bundle: true
36-
3730
- os: macos-latest
3831
target: aarch64-apple-darwin
3932
binary: lomux
4033
archive: lomux-macos-arm64.tar.gz
41-
4234
runs-on: ${{ matrix.os }}
43-
4435
steps:
4536
- uses: actions/checkout@v4
46-
4737
- uses: dtolnay/rust-toolchain@stable
4838
with:
4939
targets: ${{ matrix.target }}
50-
40+
5141
- name: Install Linux deps
5242
if: runner.os == 'Linux'
5343
run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev
54-
44+
5545
- name: Build
5646
run: cargo build --release --target ${{ matrix.target }}
57-
47+
5848
- name: Build macOS App Bundle
5949
if: ${{ matrix.build_app_bundle == true }}
6050
run: |
6151
cargo install cargo-bundle
6252
cargo bundle --release
63-
tar czf LoMux.app.tar.gz -C target/release/bundle/osx LoMux.app
64-
65-
- name: Archive binary
53+
54+
# Remove quarantine attribute and add executable permissions
55+
xattr -cr target/release/bundle/osx/LoMux.app
56+
chmod +x target/release/bundle/osx/LoMux.app/Contents/MacOS/lomux
57+
58+
# Create a DMG with proper permissions
59+
mkdir -p dist
60+
cp -R target/release/bundle/osx/LoMux.app dist/
61+
62+
# Create DMG
63+
hdiutil create -volname "LoMux" -srcfolder dist -ov -format UDZO LoMux-intel.dmg
64+
65+
# Also create a tar.gz for those who prefer it
66+
tar czf LoMux-intel.app.tar.gz -C target/release/bundle/osx LoMux.app
67+
68+
- name: Archive binary (with ad-hoc signing for macOS)
6669
shell: bash
6770
run: |
6871
cd target/${{ matrix.target }}/release
72+
73+
# Ad-hoc sign macOS binary to prevent Gatekeeper issues
74+
if [ "${{ runner.os }}" = "macOS" ]; then
75+
codesign --force --deep --sign - ${{ matrix.binary }}
76+
# Remove quarantine attribute
77+
xattr -d com.apple.quarantine ${{ matrix.binary }} 2>/dev/null || true
78+
fi
79+
6980
if [ "${{ runner.os }}" = "Windows" ]; then
7081
7z a ../../../${{ matrix.archive }} ${{ matrix.binary }}
7182
else
7283
tar czf ../../../${{ matrix.archive }} ${{ matrix.binary }}
7384
fi
74-
85+
7586
- uses: actions/upload-artifact@v4
7687
with:
7788
name: ${{ matrix.archive }}
7889
path: ${{ matrix.archive }}
79-
80-
- name: Upload macOS .app bundle
90+
91+
- name: Upload macOS .app bundle and DMG
8192
if: ${{ matrix.build_app_bundle == true }}
8293
uses: actions/upload-artifact@v4
8394
with:
84-
name: LoMux.app
85-
path: LoMux.app.tar.gz
86-
95+
name: LoMux-macOS-bundle
96+
path: |
97+
LoMux-intel.app.tar.gz
98+
LoMux-intel.dmg
99+
87100
release:
88101
name: Create GitHub Release
89102
needs: build
@@ -92,9 +105,9 @@ jobs:
92105
- uses: actions/download-artifact@v4
93106
with:
94107
merge-multiple: true
95-
108+
96109
- run: ls -laR
97-
110+
98111
- name: Create GitHub Release
99112
uses: softprops/action-gh-release@v2
100113
with:
@@ -103,5 +116,24 @@ jobs:
103116
files: |
104117
*.tar.gz
105118
*.zip
119+
*.dmg
120+
body: |
121+
## Installation
122+
123+
### macOS
124+
- **Intel**: Download `LoMux-intel.dmg` or `lomux-macos-intel.tar.gz`
125+
- **Apple Silicon**: Download `lomux-macos-arm64.tar.gz`
126+
127+
**First time running:** Right-click the app and select "Open" to bypass Gatekeeper.
128+
129+
### Windows
130+
Download `lomux-windows-x64.zip` and extract.
131+
132+
### Linux
133+
Download `lomux-linux-x64.tar.gz`, extract, and make executable with `chmod +x lomux`
134+
135+
## Requirements
136+
- FFmpeg (required)
137+
- yt-dlp (optional, for YouTube features)
106138
env:
107139
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/target/
33
**/*.rs.bk
44
*.pdb
5-
# Cargo.lock
5+
Cargo.lock
66

77
# WASM build
88
/web/
@@ -18,25 +18,46 @@
1818
.vscode/
1919
*.swp
2020
*.swo
21-
.vscode/
22-
.idea/
2321
*.sublime-project
2422
*.sublime-workspace
23+
24+
# Logs
2525
*.log
2626

2727
# Debug
2828
*.dSYM/
2929

30-
# MacOS
30+
# macOS
3131
.DS_Store
3232
.AppleDouble
33-
.LSOvveride
33+
.LSOverride
3434
**/._*
3535

3636
# Windows
3737
Thumbs.db
38-
ethumbs.db
38+
ehthumbs.db
3939
Desktop.ini
40+
$RECYCLE.BIN/
4041

4142
# Linux
4243
*~
44+
.directory
45+
.Trash-*
46+
47+
# LoMux specific
48+
/lomux_downloads/
49+
/temp/
50+
*.mp4.tmp
51+
*.mkv.tmp
52+
53+
# Build artifacts
54+
*.dmg
55+
*.app
56+
*.exe
57+
*.AppImage
58+
*.deb
59+
*.rpm
60+
61+
# Release archives
62+
*.tar.gz
63+
*.zip

Cargo.toml

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[package]
22
name = "lomux"
3-
version = "1.0.1"
3+
version = "1.0.2"
44
edition = "2021"
55
authors = ["zblauser"]
6-
description = "Lightweight media converter with FFmpeg"
6+
description = "Advanced media converter with FFmpeg, yt-dlp integration, and Adobe-style presets"
77
repository = "https://github.com/zblauser/LoMux"
88
license = "MIT"
99

@@ -16,7 +16,6 @@ icon = ["assets/LoMux.icns", "assets/LoMux.png"]
1616
[dependencies]
1717
eframe = "0.29"
1818
egui = "0.29"
19-
egui_file = "0.19"
2019
serde = { version = "1.0", features = ["derive"] }
2120
serde_json = "1.0"
2221
which = "6.0"
@@ -29,9 +28,29 @@ web-sys = "0.3"
2928
console_error_panic_hook = "0.1"
3029
getrandom = { version = "0.2", features = ["js"] }
3130

31+
# Debug
32+
[profile.dev]
33+
opt-level = 1
34+
debug = 1
35+
36+
# Release
3237
[profile.release]
33-
opt-level = "z"
34-
lto = true
35-
codegen-units = 1
38+
opt-level = 3
39+
lto = "thin"
40+
codegen-units = 16
3641
strip = true
3742
panic = "abort"
43+
44+
# Release Max
45+
[profile.release-max]
46+
inherits = "release"
47+
opt-level = 3
48+
lto = true
49+
codegen-units = 1
50+
51+
# Release Fast
52+
[profile.release-fast]
53+
inherits = "release"
54+
opt-level = 2
55+
lto = false
56+
codegen-units = 256

README.md

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
# LoMux
22
## Overview
3-
A super lightweight media converter that just works. Written in Rust for no reason in particular. (C would've been fine, but here we are, oxidizing perfectly fine python code. Currently working on a WASM build.
4-
5-
<p align="center">
6-
<img src="./assets/demo-1.jpg" alt="LoMux demo 1" height="400" width="200" />
7-
<img src="./assets/demo-2.jpg" alt="LoMux demo 2" height="400" width="200" />
8-
<img src="./assets/demo-3.jpg" alt="LoMux demo 3" height="400" width="200" />
9-
<br></p>
10-
LoMux converts your media files using FFmpeg, but with a GUI that doesn't look like it was designed in 1993. It's essentially a wrapper for FFMPEG, that runs on less than a fraction of the ram Adobe's media encoder uses. Next part of the process is working on encorperating damn near every use case I can think of under the presets. Not a rust evanglist btw, just a dude trying to apply an idea.<br><br>
11-
12-
- **Current Presets**: MP4, MKV, WebM, MP3, FLAC, GIF
3+
A super lightweight media converter and youtube downloader that just works. Written in Rust for no reason in particular. (C would've been fine, but here we are, oxidizing perfectly fine python code. Currently working on a WASM build.
4+
5+
<p align="center"><img src="./assets/lomux.jpg" alt="LoMux" width="600" height="400" /></p>
6+
7+
<table align="center">
8+
<tr>
9+
<td align="center">
10+
<img src="./assets/demo-1.jpg" alt="File upload & Presets" height="300" width="300"/><br/>
11+
[Files & Presets]
12+
</td>
13+
<td align="center">
14+
<img src="./assets/demo-2.jpg" alt="Metadata" height="300" width="300" /><br/>
15+
[Metadata]
16+
</td>
17+
</tr>
18+
</table><br>
19+
20+
LoMux converts your media files using FFmpeg (Youtube downloading with yt-dlp), but with a GUI that doesn't look like it was designed in 1993. It's essentially a wrapper for FFMPEG, that runs on less than a fraction of the ram Adobe's media encoder uses. Next part of the process is working on encorperating damn near every use case I can think of under the presets. Not a rust evanglist btw, just a dude trying to apply an idea.<br><br>
21+
22+
- **Current Presets**: Web & Social, Devices, Professional, Audio, Match Source, Custom
1323
- **Batch processing**: Throw multiple files at it
24+
- **Youtube integration**: Download/Convert YT files in one step
25+
- **Metadata editing**: Per batch, or per file
1426
- **Real-time progress**: Actually shows progress (looking at you, Adobe)
1527
- **Tiny binary**: 3-5MB vs Electron apps that somehow need 200MB to display a button
1628

@@ -34,26 +46,34 @@ cargo build --release
3446
</details>
3547

3648
## Requirements
37-
- FFmpeg (the real MVP)
49+
- [FFMPEG](https://ffmpeg.org/download.html) (the real MVP)
50+
- [yt-dlp](https://github.com/yt-dlp/yt-dlp) (optional, but needed for yt download)
3851

39-
## Why Not Just Use FFmpeg?
52+
## Why Not Just Use FFmpeg/yt-dlp?
4053
I mean, laziness I suppose. `ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4` is pretty verbose for non FFMPEG users. I read the documentation so you don't have to. Nevertheless, don't forget to thank them for making it possible.
4154

4255
## Why Rust?
4356
No certain reason, I was bored?.. and you're getting free conversion softeare. Could've written this in C? Sure, and maybe I should have. Did I? No. Will it matter to you? Most of you, probably not.
4457

4558
## Change Log
46-
### v1.0.1 (Latest)<br>
47-
Complete rewrite, same logic. Yes, I am kind of sarcastically pushing this as a minor release, as aside from the language (the code base wasn't huge), it functions identically, though albiet with a bit of a speed boost.
4859

60+
### v1.0.2 (Latest)<br>
61+
UI Update, and more defined presets
62+
- UI continues to improve, and now has a day/night mode
63+
- You can now download and convert youtube files (via url), and even add them to a batch
64+
- Further defined presets, still reserving the ability to customize
65+
- Edit the meta data of entire batches at once, or per file
66+
67+
<details>
68+
<summary><b>Previous Verions</b></summary>
69+
70+
***v1.0.1***<br>
71+
Complete rewrite, same logic. Yes, I am kind of sarcastically pushing this as a minor release, as aside from the language (the code base wasn't huge), it functions identically, though albiet with a bit of a speed boost.
4972
- Rewrote everything in Rust, because why not
5073
- Binary went from 50MB to 3MB
5174
- Actually runs at native speed now
5275
- UI is 10x more responsive
5376

54-
<details>
55-
<summary><b>Previous Verions</b></summary>
56-
5777
***v1.0.0***
5878
- Original Python/Tkinter version
5979
- Worked fine but built like a potato
@@ -65,8 +85,9 @@ Complete rewrite, same logic. Yes, I am kind of sarcastically pushing this as a
6585
</details>
6686

6787
## Roadmap
68-
- Hella new presets
69-
- WASM version
88+
- Enhance preset database
89+
- WASM build
90+
- Host it
7091

7192
## Contributing
7293
If you share the belief that simplicity empowers creativity, feel free to contribute.
@@ -79,4 +100,4 @@ Ensure your code follows the existing style.
79100

80101
## Thank you for your attention.
81102
This project started out as self-solving a specific need, and evolved into something I think could actually be useful. If you hit any issues, feel free to open one.
82-
Pull requests, suggestions, and fixes I don't have to make myself are welcome. Complaints go to /dev/null.
103+
Pull requests, suggestions, and fixes I don't have to make myself are welcome. Complaints go to /dev/null.

assets/demo-1.jpg

-541 KB
Loading

assets/demo-2.jpg

-634 KB
Loading

assets/demo-3.jpg

-809 KB
Binary file not shown.

assets/lomux.jpg

300 KB
Loading

0 commit comments

Comments
 (0)