Neatbo.

Repair recording lengths and recover declared color profiles

Keep original PCM and ICC bytes while repairing explicit WAV lengths or recovering complete embedded profile declarations.

Choose the actual deliverable

A recording editor reported an approximately 90 MB WAV that appeared as 0:00 in Resolve and Logic while VLC could play it, and asked for lossless recovery. The original file and codec were not supplied. T317 addresses one concrete cause only: unfinished classic PCM length fields, after an explicit EOF-audio assertion. It cannot establish that the reported file has this cause.

Other authors had actual ICC bytes but needed the profile’s readable declared name for a caption or review. T318 recovers reusable original profiles and every declared text record. It preserves profile/no-profile status without estimating colors or substituting EXIF ColorSpace. Both tasks run on selected local files.

Different tasks, different complete outputs
TaskComplete outputDecision that remains separate
Unfinished PCM lengthsSame-size WAV plus byte-preservation JSONWhether EOF is all audio and the recording is usable
Embedded ICC declaration recoveryOriginal profiles plus complete JSON/CSV ZIPWhether the profile or renderer produces valid color

Confirm the WAV boundary before changing lengths

Select one little-endian classic RIFF/WAVE file. The supported profile is tag 1 integer PCM with 8/16/24/32-bit samples, 1–8 channels and 1–384,000 Hz. There must be one fmt before first data; fmt is exactly 16 bytes or 18 bytes with cbSize=0. Byte rate and block alignment are checked. Unknown prefix chunks retain all body and padding bytes.

The final-data checkbox defaults off. Select it only after you establish that the first data chunk is final and every remaining byte is a complete PCM frame. A frame-aligned LIST tail can look like samples. The tool does not detect trailing metadata, repair missing samples or certify the recording.

The final-zero-pad checkbox also defaults off. Odd-length PCM requires one actual zero pad declared by the user. A final zero can be an 8-bit sample: with the option off it stays audio; with the option on it is excluded from the data length only when the resulting PCM length is odd. Nothing is removed from the file.

  • Keep the original file and compare the report’s original SHA256.
  • No compressed, float, extensible, RF64/BW64 or big-endian conversion is performed.

Inspect the exact WAV example

The 86-byte controlled recording contains a 9-byte JUNK body with its original 0xAB pad, a 16-byte fmt, and six stereo 16-bit frames at 48,000 Hz. Its two declared lengths are zero. The real data header begins at offset 54; the data body is 24 bytes.

After explicit confirmation, uint32LE at offset 4 becomes 78 and uint32LE at offset 58 becomes 24. File size stays 86 bytes, every other byte is unchanged, and the preserved PCM SHA256 matches all 24 original audio bytes. The declared duration is 0.000125 seconds. Download repaired.wav and wav-repair-report.json to inspect every prefix record and both patch spans.

Recover all profile declarations and preserve their context

T318 accepts JPEG, static PNG and standalone ICC/ICM. JPEG numbered APP2 profile parts are reconstructed in declared sequence even when stored out of order; missing, duplicate or inconsistent parts refuse the whole batch. Static PNG checks every chunk CRC and required ordering, and reads the bounded iCCP zlib stream. APNG and unknown critical chunks are outside this release. It does not decode pixels or JPEG entropy.

ICC versions 2 and 4 retain all raw header fields, the entire tag inventory and each exact original exported profile. MLUC reads every language/country record as strict UTF-16BE, including a literal leading U+FEFF. Legacy desc keeps ASCII, Unicode and raw ScriptCode bytes; text is read strictly. Complete shared tag and localized-string spans are accepted, while partial tag overlap refuses.

The seven-original example totals 2,999 source bytes and recovers five profiles totaling 1,880 bytes: 28 tags, eight text records and 114 text units. Two images have no profile, and that status remains visible. The complete ZIP is 27,960 bytes. PNG keyword, declared ICC description and cICP color hint remain separate fields.

  • profiles/NNNN.icc retains original bytes; unknown tag contents stay accessible by profile path, offset, size and SHA256.
  • icc-inventory.json keeps all literal names and text; icc-tags.csv protects formula-leading cells and includes every tag or no-profile source row.
  • A profile declaration is not color calibration, CMM conformance or evidence of the renderer’s chosen interpretation.

Apply simultaneous budgets and use the complete downloads

WAV permits one 100 MiB original, 1,000 prefix chunks and a 512 UTF-16-unit filename. The repaired WAV is exactly source-sized, so the bounded JSON report makes the 102 MiB allocation guard dominated. The preview shows the first 200 chunks; the JSON contains the full inventory.

ICC permits 100 originals, each 20 MiB and combined 80 MiB; each profile 8 MiB and combined profile bytes 32 MiB. A valid ICC size is four-byte aligned. A +1-byte allocation excess refuses before structure, while +4 is the first otherwise valid aligned excess. The complete JSON plus safe CSV must fit 32 MiB; the 65 MiB ZIP guard is dominated by the profile/report bounds and bounded archive headers.

The source table shows all selected originals with at most 2,000 UTF-16 units per cell. Use the ZIP for complete long descriptions and all raw tag contents. Existing names and metadata remain in both tools; neither output is anonymized.

ICC work budgets apply together
DimensionCeiling
Tags4,096 per profile / 65,536 total
Localized records1,024 per MLUC / 10,000 text records total
Text work4,194,304 UTF-16/ASCII units
Container work / original name100,000 visits / 512 UTF-16 units
Complete JSON plus safe CSV32 MiB, without truncated success

Recover after refusal and keep external reader differences visible

A malformed input or any budget excess refuses the entire result. Cancellation discards partial work and downloads; rerun the same original bytes in a new Worker. Native evidence includes a real 1,000-chunk WAV cancelled after 500 parsed/hashed prefix chunks and a 4,096-tag profile cancelled after 512 actual tags, with complete same-source recovery. Browser interaction evidence is maintained separately.

Independent Python wave reads every repaired frame and checks that only the permitted length bytes change. Pillow recovers image-embedded profiles; the complete raw directory and ZIP are independently checked. LittleCMS 2.19 accepts the 100-tag vector but refuses 101 tags because of its own directory ceiling. A larger bounded inventory can be preserved without promising that this external CMM can use it. PNG cICP can also take precedence over ICC during rendering.

References

Tools in this category

Expand a tool to see its steps, options and supported formats, then open its workspace.

Repair WAV length fieldsPatch only the RIFF and data lengths of a confirmed final PCM recording, preserving every existing sample and prefix byte.

Select an unfinished classic PCM WAV. Explicitly confirm that its first data chunk is final and that all remaining bytes are complete audio frames. Repair only the two length fields; download the original-size WAV and a complete byte-preservation report.

Steps

  1. Keep the original recording and check that it matches the stated classic PCM profile.
  2. Select it and explicitly confirm final data/EOF audio. Choose final zero padding only with evidence.
  3. Run the repair, then compare original/output lengths, PCM SHA256 and both patch spans.
  4. Download repaired.wav and the complete JSON; evaluate the recording in your intended player.

Available options

I confirm that first data is final and all remaining bytes are complete PCM audio
Off by default
One actual final zero is padding for odd-length PCM, not an audio sample
Off by default

Capabilities and limits

  • One original, at most 100 MiB. Source filename at most 512 UTF-16 units. At most 1,000 prefix chunks, including fmt; unknown prefix chunks and their padding are preserved as opaque original bytes.
  • Little-endian classic RIFF/WAVE only: integer PCM tag 1, 8/16/24/32 bits, 1–8 channels, sample rate 1–384,000 Hz. One fmt before the first data chunk; fmt is exactly 16 bytes or 18 bytes with cbSize=0. Frame alignment and byte rate must match these fields.
  • The final-data confirmation defaults off. This is a required user assertion, not automatic detection. Aligned trailing metadata may look like audio and cannot be distinguished here. Missing samples, wrong sample rate, empty data and incomplete frames are not repaired.
  • The optional final-zero-pad assertion defaults off. Set it only when odd-length PCM has one actual final zero pad. Without that assertion, a final zero remains an audio byte; the tool does not guess whether it is a sample or padding.
  • Only uint32LE at RIFF offset 4 and the real data-length field are patched. WAV length, prefix chunks, PCM and existing padding stay byte-identical. Complete JSON includes all offsets, original and output SHA256, PCM SHA256, format, frames, duration, every prefix chunk and both patch spans.
  • WAV plus complete JSON must fit 102 MiB. This output guard is implied by the 100 MiB source and bounded report; an independent exact 102 MiB supported output cannot be reached. Preview shows the first 200 prefix chunks and at most 2,000 UTF-16 units per cell; complete records are in JSON.
  • RIFX/RF64/BW64, extensible, float or compressed audio and malformed chunk chains are refused. No decoding, reconstruction, playback, network access or universal player/Windows compatibility guarantee. Existing names and metadata remain; this is not anonymization.
Open Repair WAV length fields →
Extract embedded ICC profilesRecover exact ICC bytes from local JPEG, static PNG or ICC files and read every declared localized description without recoloring images.

Select local JPEG, static PNG and ICC/ICM originals. Recover their exact embedded or supplied color profiles, complete header/tag inventory and every declared text record. Download a ZIP containing reusable profile bytes, full JSON and formula-protected CSV.

Steps

  1. Select original JPEG, static PNG or ICC/ICM files; retain their originals.
  2. Review profile/no-profile status, declared descriptions, raw version and color-space fields.
  3. Download the complete ZIP and compare each exported profile SHA256 with the report.
  4. Use a suitable color management system separately when you need rendering or transform validation.

Capabilities and limits

  • 1–100 original files; each at most 20 MiB and combined at most 80 MiB. Original names at most 512 UTF-16 units. The entire batch either completes or refuses; every original SHA256 is retained.
  • Each profile at most 8 MiB and combined profile bytes at most 32 MiB. At most 4,096 tags per profile, 65,536 total tags, 1,024 records per MLUC tag, 10,000 text records and 4,194,304 text UTF-16/ASCII units. Container marker/chunk visits at most 100,000. These work budgets apply together.
  • Static PNG checks the full chunk chain and every CRC, required ordering, supported IHDR, iCCP keyword and bounded zlib profile. APNG and unknown critical chunks refuse. JPEG checks marker and scan framing through EOI and reconstructs every complete numbered ICC_PROFILE APP2 piece in declared order, even when physical order differs. No pixel or entropy decoding is claimed.
  • ICC major versions 2 and 4: exact word-aligned declared size, all header fields, tag spans, zero reserved bytes and full raw export. Exact shared tag spans and shared MLUC string spans are accepted; partial tag overlap is outside this profile. MLUC UTF-16BE, legacy desc and classic text are read strictly. A leading U+FEFF in declared text remains literal.
  • All unknown or nontext tag contents remain recoverable via the exported complete profile and exact offset/size/SHA256 references. Legacy ScriptCode bytes remain opaque. No guessed sRGB, EXIF ColorSpace fallback or missing-name invention. A valid image with no profile is reported explicitly.
  • Full JSON plus every safe CSV row at most 32 MiB. ZIP at most 65 MiB; that allocation guard is implied by the 32 MiB profile and report bounds, not an independently reachable output ceiling. Profile sizes are word-aligned: byte guards reject +1 before structure, while the first otherwise valid aligned excess is +4.
  • Table shows all selected sources with cells capped at 2,000 UTF-16 units; complete localized strings and raw unknown tags are in the ZIP. No color rendering, calibration, transform usability or ICC conformance certification. PNG cICP may override ICC during rendering. LittleCMS 2.19 refuses directories above its 100-tag internal limit; this inventory can still preserve them, without claiming CMM compatibility.
  • TIFF/PDF/WebP/HEIF/JXL, network/installed-profile lookup, code/CSS execution and automatic navigation are outside this release. Original metadata is preserved; this is not anonymization.
Open Extract embedded ICC profiles →

Tools used in this article

Repair WAV length fields →Patch only the RIFF and data lengths of a confirmed final PCM recording, preserving every existing sample and prefix byte.Extract embedded ICC profiles →Recover exact ICC bytes from local JPEG, static PNG or ICC files and read every declared localized description without recoloring images.