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.
| Task | Complete output | Decision that remains separate |
|---|---|---|
| Unfinished PCM lengths | Same-size WAV plus byte-preservation JSON | Whether EOF is all audio and the recording is usable |
| Embedded ICC declaration recovery | Original profiles plus complete JSON/CSV ZIP | Whether 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.
| Dimension | Ceiling |
|---|---|
| Tags | 4,096 per profile / 65,536 total |
| Localized records | 1,024 per MLUC / 10,000 text records total |
| Text work | 4,194,304 UTF-16/ASCII units |
| Container work / original name | 100,000 visits / 512 UTF-16 units |
| Complete JSON plus safe CSV | 32 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
- Original recording recovery question
Original author selftext read and preserved on 2026-10-07: about 90 MB, 0:00 in Resolve/Logic, playable in VLC. No original file or codec supplied, so this narrow PCM repair is not a promise for that recording.
- Original task: obtain the embedded profile name
Full question and original-author comment read on 2026-10-07. Actual ProPhoto RGB bytes and caption-name need support recovering profile declarations; EXIF/model or built-in sRGB fallback is not the same result.
- Original task: read a usable description from ICC bytes
Full original question and author follow-up read on 2026-10-07. The author confirms their final extraction via ExifTool; this implementation instead exports and reads bounded profiles locally.
- FFmpeg WAV ignore_length documentation
Section 3.29 read on 2026-10-07. It describes unfinished lengths and the risk that nonaudio chunks after data are treated as audio; no automatic tail detection is inferred.
- Microsoft RIFF chunk structure
Read on 2026-10-07: FOURCC, lengths and word padding establish the byte spans, rather than a fixed header search.
- ICC embedding technical note
JPEG numbered ICC_PROFILE APP2 and PNG iCCP sections read on 2026-10-07; they define actual piece reconstruction, not keyword or substring guessing.
- ICC profile header, directory and localized text specification
Sections 7.2–7.4 and 10.13 read on 2026-10-07. Raw directory spans and complete MLUC records are preserved; no transform-conformance certification is claimed.
- PNG iCCP and cICP color declarations
Sections 11.3.2.3 and 11.3.2.6 read on 2026-10-07. An embedded ICC profile alone does not establish which declaration a renderer uses.
- LittleCMS 2.19 internal tag-directory ceiling
Official MAX_TABLE_TAG=100 definition read on 2026-10-07; real 100/101-tag library proof distinguishes directory inventory from CMM compatibility.
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
- Keep the original recording and check that it matches the stated classic PCM profile.
- Select it and explicitly confirm final data/EOF audio. Choose final zero padding only with evidence.
- Run the repair, then compare original/output lengths, PCM SHA256 and both patch spans.
- 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.
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
- Select original JPEG, static PNG or ICC/ICM files; retain their originals.
- Review profile/no-profile status, declared descriptions, raw version and color-space fields.
- Download the complete ZIP and compare each exported profile SHA256 with the report.
- 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.