I posted this last night, and completely forgot to get the web demo from the repo onto GitHub Pages. Here you go: https://flo-audio.github.io/demo/
Opus is, obviously, currently more optimized, offers better lossy compression, and has really low latency (great for streaming)
It does have some problems though :P
Metadata editing is one of the hardest out of most formats, You would need two separate formats (FLAC + ogg) to keep lossless + lossy
flo can be lossless as well as lossy, metadata editing is extremely easy, much richer metadata, simpler but subjectively better file organization/format, and I tried to optimize it for the web!
So over the past 7-8 months, I (with some help) wrote a little something called flo.
In short, it's a dual codec, both lossless and lossy, with a clean, structured layout that allows metadata to be edited without needing to re-encode the audio.
The readmes in the repo go into a far more technical explanation, but here's a short little about.
(This is more me nerding about flo, rather than self promotion ;D.)
Metadata: Most formats use complex methods to squeeze in audio data (re-encoding, block manipulation, or other more complicated stuff). I hated this (Originally, I wanted to modify an existing codec, and... metadata is not fun with most existing ones), and so I made my own way! flo uses metadata in a chunk at the end of the file. No dealing with data re-encoding due to position shifting, complex Vorbis comments, need I go on? This allows for near instant metadata saving and reading. And, the best part is that it uses MessagePack (in short, a JSON equivalent)! No more having hundreds of frames for metadata (ID3), simply parse a human-readable once converted JSON representation!
Dual-mode: This is something I was rather confused about, why it wasn't done much, much more often. (After implementing MDCT via FFT and ALPC with Rice entropy, I understand now. The majority of that was based on reference implementations, re-implemented by me with tweaks where I saw fit.) flo can use both lossless and lossy encoding, something only a few formats do. My psychoacoustic model is honestly pretty basic right now, just Bark scale bands. but it works surprisingly well.
Web: Though I would have preferred a JS or TS implementation (much, MUCH more familiar with those two), there are obvious reasons why those are extremely impractical. I chose to use Rust, mostly because of the excellent WASM support (and due to that, ease of adoption in browsers), and also type safety that let me spend much, much less time than i'd expect dealing with finicky runtime bugs. I also wrote a streaming decoder (super frustrating but fun) specifically for the web, that works really well :D.
Metadata (again): The absolute two favorite things I could add support for: SYLT, or synced lyrics, and Animated Cover Art. Animated Cover Art is technically possible through a loophole with the mp3 standard supporting webp's, but flo has native support. (animated webp's can have the file extension .webp, and so can be encoded into the file. the awebp then can be played by compatible players (for example, my HTMLPlayer :D)) Synced lyrics are just cool. Also, pre-computed waveforms! (The peaks are already calculated and stored. No need to decode the entire file just to draw a waveform in your audio editor.) And section markers, like YouTube chapters, but in music files!
Well thanks for listening to me nerd out, and I hope you'll give flo a spin!
The library and converter are available on crates.io (libflo-audio, reflo) and there's a full browser demo in the repo (download web-demo.zip from the latest release)
It's not registered anywhere, more like a claimed trademark of sorts(?)
I'm honestly not really sure about how that sort of stuff works, I just wrote it to be safe.
> I posted this last night, and completely forgot to get the web demo from the repo onto GitHub Pages. Here you go: https://flo-audio.github.io/demo/
Is there an online demo? How does it compare to Opus?
I posted this last night, and completely forgot to get the web demo from the repo onto GitHub Pages. Here you go: https://flo-audio.github.io/demo/
Opus is, obviously, currently more optimized, offers better lossy compression, and has really low latency (great for streaming)
It does have some problems though :P Metadata editing is one of the hardest out of most formats, You would need two separate formats (FLAC + ogg) to keep lossless + lossy
flo can be lossless as well as lossy, metadata editing is extremely easy, much richer metadata, simpler but subjectively better file organization/format, and I tried to optimize it for the web!
So over the past 7-8 months, I (with some help) wrote a little something called flo.
In short, it's a dual codec, both lossless and lossy, with a clean, structured layout that allows metadata to be edited without needing to re-encode the audio.
The readmes in the repo go into a far more technical explanation, but here's a short little about.
(This is more me nerding about flo, rather than self promotion ;D.)
Metadata: Most formats use complex methods to squeeze in audio data (re-encoding, block manipulation, or other more complicated stuff). I hated this (Originally, I wanted to modify an existing codec, and... metadata is not fun with most existing ones), and so I made my own way! flo uses metadata in a chunk at the end of the file. No dealing with data re-encoding due to position shifting, complex Vorbis comments, need I go on? This allows for near instant metadata saving and reading. And, the best part is that it uses MessagePack (in short, a JSON equivalent)! No more having hundreds of frames for metadata (ID3), simply parse a human-readable once converted JSON representation!
Dual-mode: This is something I was rather confused about, why it wasn't done much, much more often. (After implementing MDCT via FFT and ALPC with Rice entropy, I understand now. The majority of that was based on reference implementations, re-implemented by me with tweaks where I saw fit.) flo can use both lossless and lossy encoding, something only a few formats do. My psychoacoustic model is honestly pretty basic right now, just Bark scale bands. but it works surprisingly well.
Web: Though I would have preferred a JS or TS implementation (much, MUCH more familiar with those two), there are obvious reasons why those are extremely impractical. I chose to use Rust, mostly because of the excellent WASM support (and due to that, ease of adoption in browsers), and also type safety that let me spend much, much less time than i'd expect dealing with finicky runtime bugs. I also wrote a streaming decoder (super frustrating but fun) specifically for the web, that works really well :D.
Metadata (again): The absolute two favorite things I could add support for: SYLT, or synced lyrics, and Animated Cover Art. Animated Cover Art is technically possible through a loophole with the mp3 standard supporting webp's, but flo has native support. (animated webp's can have the file extension .webp, and so can be encoded into the file. the awebp then can be played by compatible players (for example, my HTMLPlayer :D)) Synced lyrics are just cool. Also, pre-computed waveforms! (The peaks are already calculated and stored. No need to decode the entire file just to draw a waveform in your audio editor.) And section markers, like YouTube chapters, but in music files!
Well thanks for listening to me nerd out, and I hope you'll give flo a spin!
The library and converter are available on crates.io (libflo-audio, reflo) and there's a full browser demo in the repo (download web-demo.zip from the latest release)
flo is licensed under the Apache-2.0 license.
>"flo" and related branding are trademarks of NellowTCS. While the flo™ codec is open-source, the name "flo" and the branding are protected.
Trademarks registered where exactly? How?
>FLO's design separates metadata from audio data, allowing instant updates. No re-encoding. No quality loss. No waiting.
>// Create streaming decoder
>// Clean up
Is this vibecoded?
> Is this vibecoded?
Nope, all code was written by me (my friends helped in a few places).
Some of the docs were "improved" with AI (grammarly to be exact), but I'm probably going to go back and rewrite those, I didn't like it.
> Trademarks registered where exactly? How?
It's not registered anywhere, more like a claimed trademark of sorts(?) I'm honestly not really sure about how that sort of stuff works, I just wrote it to be safe.