AudioHide

Hide a song inside an image — runs entirely in your browser, no upload.

Settings

Image

Applies a JPEG pass before hiding. Reduces pixel noise so LSB changes are less detectable. Output is always PNG.
2-bit stores 2 bits per colour channel, doubling capacity. Very hard to see but slightly more detectable by analysis tools.

Audio

Lower rate = smaller file = fits at lower speed = less pitch change.
Boosts quiet audio to full volume before encoding.
When ON, left and right channels are encoded separately for full stereo audio. This doubles the WAV size — you will need a larger image or slower speed to fit. Mono is the default and works well for most music.

Playback speed


Decode

When audio was sped up, automatically slows it back to original speed and pitch on extraction.

Multi-frame APNG (GIF with hidden audio)

When ON, the audio is split across multiple frames of an Animated PNG. The output plays as a looping animation in any browser and can be decoded back to audio by dropping it into the Decode tab. Best for GIF carrier images. Note: multi-frame uses 1-bit mono mode regardless of other settings.

Scatter passkey

Without a passkey, bits are written from pixel 0 in order. With a passkey, bits are scattered in a key-derived random order, making detection much harder.

Debug

Shows browser compatibility info and a live event log.
Version --
Web Worker --
AudioContext --
OfflineACtx --
ImageBitmap --
File.arrayBuf --
Protocol --
CompressStream--
DecompressStr. --
Mobile --
Event log:
(no events yet)

⚗ Developer Experiment

⚠ Experimental features only. These are not part of the stable AudioHide release.
α ALPHA = unstable, may break normal encode/decode.  β BETA = mostly works, not fully tested.
Disable all toggles here to return to normal behaviour.
α
Runs raw deflate on the WAV before LSB embedding. On decode, automatically decompresses. May fail on older browsers without DecompressionStream. Does not affect existing uncompressed images.
α
MP3/Opus require browser encoding support (Chrome 94+ for Opus). Decoded audio plays directly in browser. WAV is always safe — use MP3/Opus only if you need to fit more audio at 1.0× speed.
α
Embeds each byte multiple times with a Reed-Solomon style redundancy scheme. Increases payload size by ~3×. Designed to survive Twitter/Discord/Telegram auto-JPEG. Decode automatically reconstructs from redundant copies. Still experimental — success rate varies by platform compression settings.
α
Embeds any file (ZIP, PDF, TXT, images, code, etc.) directly into the carrier PNG. No audio processing — raw bytes only. Decode extracts and downloads with original filename and extension. Audio mode is disabled while this is on. Capacity = raw pixel capacity minus 32-byte header.
α
Renders a mel-spectrogram of your audio as the carrier image itself, then embeds the audio into its own spectrogram. The image is secretly "showing" you what it contains. Overrides the carrier image drop zone — no separate image needed. Output PNG is both the spectrogram art and the steg container.
Format Support
Carrier input formats (encode side) β
Enable additional image formats as carrier inputs. PNG/BMP/GIF always supported regardless of these settings.
Output format (what gets saved) β
Default output is always PNG. Optionally save in a different lossless format.
Decode input — additional formats β
Auto-detect and accept additional formats on the decode side. Formats marked α may not work in all browsers.
Capacity / Quality
β
Distributes bits unevenly across R/G/B channels: Blue receives the most bits (least visible to the human eye), Green moderate, Red fewest. Slightly increases effective capacity without visible quality change. Decode automatically detects and reverses the weighting.
How to use:
  1. Encode: Select a PNG image and a song, then click "Encode and Download".
  2. Decode: Drop an encoded PNG — it auto-detects and switches to the Decode tab.
  3. If the image is too small, audio is sped up to fit. Decode reverses this automatically.
  4. Always keep the output as PNG — re-saving as JPEG destroys the hidden data.

Step 1 — Image file (PNG or BMP only)

Tap or click to select an image, or drag and drop
PNG, BMP, or GIF — JPEG cannot hold hidden data. Output is always PNG.
Image preview
Resize image (optional)
Original: --
Capacity: --  |  Est. output PNG: --
Scale: %

Step 2 — Song file (MP3, WAV, FLAC, etc.)

Tap or click to select an audio file, or drag and drop
Any format your browser can play
Processing… 0%  

Encoded image file

Tap or click to select the encoded PNG, or drag and drop
Tap to select a file
Encoded image preview

Extracted payload information

Payload size
--
Speed applied
--
Original duration
--
Encoded duration
--
LSB mode
--
Payload type
audio
Decoding… 0%  

AudioHide v-- — all processing is local, nothing is sent to any server.  |  GitHub