fluorite
Version, currently 0.1.42 versions
- 0.1.5latestOct 2, 2026
- 0.1.4not indexedOct 2, 2026
github.com/sol-vin/fluorite
Modern FFMPEG bindings, fluent DSL, streaming process wrapper, smart conversion presets, and interactive terminal UI (TUI) for Crystal.
Nothing has been indexed for 0.1.4 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.
Installation
# Add this to your shard.yml
dependencies:
fluorite:
github: sol-vin/fluorite
version: ~> 0.1.4Then run:
shards installshard.yml
No shard.yml has been indexed for 0.1.4. You can read it on the repository.
Dependencies
Unknown: the shard.yml for this version has not been read yet.
README
This README is the one indexed from the repository at its latest ref, not from the tag for this version.
Fluorite 🎬💎
Next-generation FFMPEG bindings, fluent Crystal DSL, asynchronous streaming process wrapper, smart conversion presets, and full-screen Opal terminal UI.
Fluorite turns complex, arcane ffmpeg and ffprobe command strings into elegant, type-safe, and self-documenting Crystal code. Whether you need a 1-line Discord video compressor that is mathematically guaranteed to fit under upload limits, an interactive full-screen TUI to batch transcode media, a microsecond-accurate real-time progress streamer, or low-level C FFI access, Fluorite delivers the ultimate developer experience.
✨ Features at a Glance
- Fluent Block & Chainable DSL: Express complex inputs, multi-stream mappings, hardware acceleration, video/audio codecs, and filter graphs naturally in Crystal.
- Microsecond Real-Time Progress Streaming: Non-blocking asynchronous fiber execution with structured progress events (FPS, percentage, speed, dynamic ETA countdown, bitrate, size).
- Smart UX Presets:
- Discord Bit Budgeting: Automatically measures media duration, calculates total bit allocation ($V + A$), and transcodes video guaranteed to fit under Discord's 10MB/25MB/50MB limits!
- Crisp 2-Pass GIF: Generates optimum 256-color palettes with Lanczos scaling for non-dithered high-definition GIFs.
- Web FastStart: Optimizes MP4 containers for instant browser playback by moving the
moovatom up front. - Instant Stream Copy Trim: Lossless cutting in milliseconds (
-c copy) without re-encoding. - Audio Extraction: Direct conversion to MP3 (VBR/CBR), Opus, AAC, or lossless FLAC.
- Hardware Acceleration: Automatic GPU detection and mapping for NVIDIA NVENC (
h264_nvenc,hevc_nvenc,av1_nvenc), Intel QSV, AMD AMF, and Apple VideoToolbox.
- Deep Media Probing (
Fluorite::Probe): Type-safe parser forffprobeJSON, providing structured containers, audio/video stream specs, framerates, color spaces, aspect ratios, and tags. - Interactive Opal Terminal UI (
fluorite tui): Full-screen workspace built onsol-vin/opalfeaturing file browsing, media inspector cards, preset launcher, live Unicode progress gauges, FPS sparklines, and raw command preview. - CLI & Interactive Wizard (
fluorite wizard): Beautiful colorized terminal utilities and step-by-step interactive configuration. - Low-Level C FFI Bindings (
Fluorite::C/LibAV): Native declarations forlibavcodec,libavformat, andlibavutil. - Integrated Tooling: Automated commit-based versioning via
sol-vin/carbonand multi-track documentation viasol-vin/jasper.
🚀 Installation
Add fluorite to your shard.yml:
dependencies:
fluorite:
github: sol-vin/fluorite
branch: main
Run shards install.
Requires ffmpeg and ffprobe installed on your system (e.g., via Scoop, Chocolatey, Homebrew, or apt).
🛠️ Quick Start
1. Fluent Block DSL
require "fluorite"
cmd = Fluorite.build do
# Global options
overwrite!
threads 0
# Input configuration
input("gameplay.mkv") do
seek 10.seconds
duration 30.seconds
hwaccel :cuda # or :auto, :qsv, :amf
end
# Video options
video do
codec :h264
crf 20
preset :slow
scale 1920, 1080
fps 60
end
# Audio options
audio do
codec :aac
bitrate "192k"
volume 1.2
end
# Filter graph
filter do
drawtext text: "Recorded with Fluorite", fontsize: 24, fontcolor: "white@0.8", x: 20, y: 20
end
# Output destination
output("highlight.mp4") do
faststart!
end
end
# Run with real-time progress callbacks
runner = cmd.run do |p|
print "\rTranscoding: #{p.percent.round(1)}% | FPS: #{p.fps} | Speed: #{p.speed}x | ETA: #{p.eta_formatted}"
end
puts "\nDone! Saved to highlight.mp4"
2. Chainable Fluent Syntax
require "fluorite"
Fluorite.input("raw.mov")
.video_codec(:h264)
.crf(22)
.scale(1280, 720)
.audio_codec(:aac)
.output("encoded.mp4")
.run
3. Deep Media Inspection (Fluorite::Probe)
info = Fluorite.probe("movie.mkv")
puts "Format: #{info.format_name}"
puts "Duration: #{info.duration_formatted} (#{info.duration.total_seconds}s)"
puts "Size: #{info.human_size}"
puts "Video: #{info.video_summary}" # e.g. "H.264 1920x1080 @ 60.0 fps (yuv420p)"
puts "Audio: #{info.audio_summary}" # e.g. "AAC 2.0 @ 192 kbps, 48000 Hz"
4. Smart UX Presets
# 1. Discord 25MB Fit (auto bit budgeting)
Fluorite::Presets::Discord.convert("long_recording.mp4", "discord_upload.mp4", target_mb: 25)
# 2. High-Quality 2-Pass Palette GIF
Fluorite::Presets::Gif.convert("clip.mov", "preview.gif", fps: 15, width: 480)
# 3. Web-Optimized FastStart MP4
Fluorite::Presets::Web.convert("source.avi", "streamable.mp4")
# 4. Extract High-Quality Audio
Fluorite::Presets::Audio.extract("concert.mkv", "track.mp3", format: :mp3, bitrate: "320k")
# 5. Millisecond Stream-Copy Trim (no re-encoding!)
Fluorite::Presets::Trim.cut("movie.mp4", "clip.mp4", from: "00:01:30", to: "00:02:15")
🖥️ Interactive Terminal UI (TUI)
Fluorite includes a full-screen, reactive terminal application powered by Opal:
# Launch full-screen interactive TUI
fluorite tui
TUI Highlights:
- File Browser: Browse media files in the workspace with audio/video extension filtering.
- Inspector Panel: Dynamic cards detailing container format, codecs, resolution, bitrate, and streams.
- Conversion Presets: 1-click presets for Discord, Web MP4, GIF, Audio extraction, and AV1.
- Live Transcode Monitor: Real-time Opal progress gauge, digital speed & FPS telemetry, dynamic ETA countdown, FPS sparkline chart, and scrolling log viewer.
- Command Preview: Press
Canywhere to inspect and copy the exact generatedffmpegcommand line.
💻 CLI Commands
Fluorite also acts as a standalone terminal powerhouse:
# Interactive TUI
fluorite tui
# Interactive step-by-step CLI setup wizard
fluorite wizard
# Beautiful colorized media inspection table
fluorite probe video.mp4
# Compress for Discord (10MB / 25MB / 50MB)
fluorite discord video.mp4 --limit 25MB
# Convert to crisp high-definition GIF
fluorite gif animation.mov --fps 15 --width 480
# Ultra-fast lossless cut
fluorite trim video.mp4 --from 00:01:00 --to 00:01:45 -o clip.mp4
# Extract audio track
fluorite audio podcast.mp4 --format opus -o podcast.opus
📚 Documentation (Jasper)
Fluorite's documentation is compiled via sol-vin/jasper:
# Validate guides
jasper validate
# Compile into Crystal docs
jasper build
# Generate static HTML doc site
crystal docs
⚡ Versioning (Carbon)
Fluorite uses sol-vin/carbon for automated commit-based versioning:
# Audit repository version health
carbon doctor
# Bump commit version and sync manifests
carbon bump
📄 License
MIT © Ian Rash (sol-vin)
Documentation
Built from the current release. The first visit to a release nobody has asked for starts its build.
Links
This release
- Version
0.1.4- Tagged
- Oct 2, 2026
- Commit
95cf2702964d- Indexed
- not yet
Dependents
Repository
github.com/sol-vin/fluorite
Metadata
- Created
- Oct 4, 2026
- Updated
- Nov 10, 2026
- Synced
- Nov 9, 2026
- Versions
- 2