Wijzigingslog

April 13, 2026

Fixed: MCP endpoint no longer rejects back-to-back JSON-RPC calls

The /mcp endpoint was false-positive rate-limiting compliant MCP clients. The MCP protocol pipelines JSON-RPC calls (initializetools/listtools/call) within a single logical conversation, but the 1-second per-IP cooldown shared with the REST API was denying every second call in these pairs with HTTP 429. Observed in the wild from multiple MCP registry health-checkers pinging initialize + tools/list ~80ms apart. The cooldown is now skipped for /mcp; the burst (20/min), hourly (150/h), and daily (1000/day) tiers continue to guard against abuse.

April 12, 2026

New: Full multi-language support: 6 languages, 1428 translated pages

CleverUtils.com is now available in 6 languages: English, French, German, Spanish, Portuguese, and Dutch. Every page — all 238 converters, tools, and utility pages — has localized <title>, meta descriptions, <h1>, and OG/Twitter social tags in each language. The navbar, footer, and homepage are fully translated with no hardcoded English. Language switcher dropdown appears on every page. hreflang cross-links for SEO are auto-generated.

Architecture: shared templates + per-language content arrays (src/data/pages/<slug>/<lang>.php). Adding a new language or translating a new page requires only one content file — no markup duplication.

Improved: i18n infrastructure: Phase 2 Lang::_() refactor eliminates 13K lines of duplication

The navbar, footer, and homepage templates were refactored from 6 per-language copies each to a single shared template that reads all user-visible strings from Lang::_('key') calls into per-language locale files. Net result: 13,307 lines of duplicated markup eliminated. Adding a 7th language now takes ~30 minutes instead of ~5 hours.

April 10, 2026

Fixed: JPG/PNG/PDF to DXF landing pages had a broken upload widget

Found during a full-site frontend audit: the JPG to DXF, PNG to DXF, and PDF to DXF templates had unbalanced HTML — a leftover empty <div> with a stray </button> and two extra </div> closing tags from when the templates were generated by stripping the “Paste SVG Code” feature out of the SVG to DXF page. Bonus content fixes: the “Choose File” button still said “Choose SVG File” on all three pages, the placeholder file badge said .svg instead of .jpg/.png/.pdf, and the “What is JPG/PNG/PDF?” section described SVG instead of the actual format.

Improved: Open Graph meta tags are now auto-injected for every page

58 pages (mostly unit converters and a few utility pages) were missing og:title and og:description tags, which meant their Facebook/Twitter/LinkedIn share previews showed only the URL with no title or description text. The shared layout (blog.php) now derives og:title from the page <title> (stripped of the “— CleverUtils.com” suffix), og:description from the page meta description, and also auto-injects og:url, og:type, twitter:title, twitter:description, and twitter:card when the page head doesn't already define them. Pages that explicitly set these tags continue to override the auto-injection.

Fixed: All four DXF converters were silently broken since launch

SVG to DXF, JPG to DXF, PNG to DXF, and PDF to DXF were all returning "Conversion from X to dxf is not supported" for every upload, on both the public form and the REST API. The to_dxf handler (Inkscape for vectors, potrace+Inkscape for raster) was added on 7 April but the corresponding output format was never registered in the realConversions allow-list, so the upstream validation rejected every request before reaching the handler. Added dxf as a valid output for svg, jpg, jpeg, png, gif, bmp, webp, tiff, tif, eps, ai, and pdf. All four landing pages verified working on dev and prod.

Fixed: remove-audio-from-video API endpoint was rejecting same-format videos

/api/v1/tools/remove-audio-from-video returned "Conversion from mp4 to mp4 is not supported" because the preserve_ext alias correctly tried to keep the input format, but our realConversions allow-list never contained same-format video entries (mp4→mp4, mov→mov, etc.). Added the same-format entries for the main video container formats — this also enables recompression and speed-change without changing container format.

Fixed: REST API: three tools were unreachable through the dispatcher

The /api/v1/tools/qr-code-generator, /api/v1/tools/webpage-to-pdf, and /api/v1/tools/gif-maker endpoints were returning NO_FILE (qr/webpage) or CONVERSION_FAILED (gif-maker). The dispatcher in api.php hard-required _FILES['file'], but qr-code-generator takes text, webpage-to-pdf takes url, and gif-maker's handler reads _FILES['video'], not 'file'. Added no_file and file_field metadata to the TOOL_MAP entries; the dispatcher now skips the file check for text/URL tools and aliases the incoming file upload to the field the handler reads from. All three endpoints verified working on dev and prod.

Fixed: REST API: validation errors now return HTTP 400 instead of 500

Bad-input errors like "Please enter a password" (protect-pdf), "Please enter watermark text" (watermark-image), and "Invalid time range" (audio-cutter, trim-video) were being surfaced as HTTP 500 CONVERSION_FAILED, which made it impossible for clients to distinguish a server error from a missing parameter. Native handlers in convert.php emit user-facing strings without setting an HTTP status, so the API wrapper now classifies common validation message patterns and demotes them to HTTP 400 with a new VALIDATION error code.

Improved: REST API rate limiter no longer auto-bans on cooldown 429s

The 5-tier rate limiter would record any 429 (including the benign 1-second cooldown 429) toward a ban counter that triggered a 24-hour IP block at 10 events per hour. Sequential clients doing tool chaining could easily generate 10+ cooldown 429s during normal use and get banned. Cooldown 429s are now skipped from the ban counter entirely — only real abuse signals (burst, hourly, daily, per-endpoint caps) count toward escalation, and the threshold itself was raised from 10 to 30.

New: REST API: flip-image tool

Added /api/v1/tools/flip-image — mirrors an image horizontally (default), vertically, or both. Accepts file (any common image format) and an optional mode parameter (horizontal, vertical, both). Previously listed in the TOOL_MAP as NOT_IMPLEMENTED.

Fixed: iPhone HEVC MP4 files were rejected as invalid

iPhone videos saved as .mp4 with HEVC encoding were being rejected with "This file is not a valid MP4 file" at upload time, blocking conversion to MP3, WAV, GIF, and other formats. iPhone iCloud streaming optimization writes a wide placeholder atom at the start of the file followed immediately by a multi-megabyte mdat payload, with the ftyp and moov boxes appended at the end — perfectly valid ISO Base Media Format, but our magic-byte validator only accepted files where ftyp appears at offset 4. Validator now accepts any of the legal first-box types (ftyp, wide, free, skip, mdat, moov, pnot) for the entire mp4/mov/m4a/m4v/3gp family.

Fixed: XML Formatter page was returning a truncated empty response

The XML Formatter page was silently broken: HTTP 200 but the response stopped mid-render with no body content and no H1, because the sample-XML JavaScript literal contained <?xml ... ?> which PHP (with short_open_tag enabled) parsed as a PHP open/close tag and aborted with a syntax error. Sample XML is now built via String.fromCharCode so neither <? nor ?> appears in the PHP source. Found during a full-site rendering audit.

Fixed: EPUB and ebook tools robust against wrong file extensions

If a user uploaded an EPUB file with a different extension (e.g. book.docx), our magic-byte detection correctly identified it as EPUB and routed to the right handler — but pandoc and kindlegen then re-detected the format from the on-disk filename and failed. Now both epub_to_pdf and epub_to_mobi create a sibling symlink with the right .epub extension before invoking the external tool, so the conversion works regardless of how the user named their file.

Fixed: HTML to PDF was silently broken

The HTML to PDF tool had been silently producing empty PDFs (a directory listing of the input mount point) for some time. Same root cause as the EPUB fix earlier today: the intermediate sanitized HTML was written to PHP-FPM's sys_get_temp_dir(), which lives in a private mount namespace invisible to the host Docker daemon, so Chrome ended up rendering an empty bind mount. The html_to_pdf handler now writes its scratch HTML to the per-job upload directory, which both PHP and Docker can see. Found during a code-audit pass after the EPUB fix.

Fixed: EPUB to PDF and other ZIP-based document conversions

EPUB → PDF was failing for almost every user with a generic "source file could not be loaded" error (184 failed jobs in the last week). Two unrelated bugs combined: (1) our magic-byte detector returned docx for every ZIP-based file, so EPUBs were routed through LibreOffice as Word documents and crashed; (2) our Chrome PDF renderer mounted the input file at a path inside PHP-FPM's private temp namespace, which the host Docker daemon couldn't see, so Chrome ended up rendering an empty directory listing.

Detection now opens the ZIP and reads the OCF mimetype entry (EPUB, ODT, ODS, ODP) or looks for OOXML markers (DOCX, XLSX, PPTX). The PDF renderer now writes its intermediate HTML to the job's working directory instead of /tmp. Also fixed the Chrome bind-mount path so the file URL has a real .html extension.

New: Public REST API at /api

CleverUtils now ships with a free public REST API for programmatic file conversion. Convert images, audio, video, documents, and PDFs — plus AI tools like upscaling, background removal, vocal isolation, and speech-to-text — with a single HTTP request. Anonymous (no signup, no API keys), per-IP rate limiting, batch endpoint for up to 20 files, full documentation, and integration snippets on every relevant tool page.

Fixed: OG images now show CleverUtils.com brand

Social media share previews (Facebook, Twitter, LinkedIn) were still showing the old Convertio.com brand on some pages. The dynamic OG image generator (og.php) had already been updated to render CleverUtils.com, but cached JPEGs in images/og/ from before the rebrand were still being served. Purged 732 stale cache files locally and invalidated the corresponding URLs in Cloudflare so social platforms refetch the new branded images on next share.

April 7, 2026

New: DXF Converters

Added PDF to DXF, JPG to DXF, and PNG to DXF converters. Vector files (SVG, PDF, EPS) are converted via Inkscape. Raster images (JPG, PNG) are first traced to vector paths using potrace, then converted to DXF. Output works with AutoCAD, laser cutters, CNC machines, and other CAD software.

New: Text Compare (Diff)

New text comparison tool. Paste two texts and see line-by-line differences with word-level highlighting. Uses LCS algorithm. 100% client-side — your text never leaves your browser.

New: Reverse Video

New reverse video tool. Play any video backwards with three audio options: reverse audio, mute, or keep original forward audio. Outputs as MP4 (H.264 + AAC). Supports MP4, MOV, AVI, MKV, WebM, and more.

New: Merge Videos

New video merger tool. Combine 2–10 video clips into a single MP4. Drag to reorder clips. Supports mixed formats (MP4, MOV, AVI, MKV, WebM) — all clips are re-encoded to H.264 + AAC for maximum compatibility.

New: Image Metadata Viewer & Remover

New EXIF metadata viewer and remover. View camera info, GPS coordinates, shooting settings, dates, and more — 100% client-side in your browser. Remove all metadata with one click using ImageMagick for privacy protection.

New: Word Counter

New word counter tool. Count words, characters (with and without spaces), sentences, paragraphs, and estimated reading time. 100% client-side — your text never leaves your browser.

New: Case Converter

New case converter tool. Convert text between 11 formats: sentence case, lowercase, UPPERCASE, Title Case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, tOGGLE cASE, and aLtErNaTiNg case. 100% client-side.

New: AI Background Changer

New AI-powered background changer. Remove photo background and replace with a solid color (white, black, or any custom hex), blur the original background for a bokeh effect, or upload your own image as the new background. Uses U2-Net AI for precise background removal and ImageMagick for compositing.

New: AI Audio Noise Reduction

New AI-powered audio noise reduction tool using DeepFilterNet3 neural network. Remove background noise from podcasts, interviews, voice memos, and phone recordings. Three strength levels: Light (6 dB), Moderate (12 dB), and Aggressive (20 dB). Processes at 48kHz full-band quality, outputs as 320kbps MP3. A 5-minute recording processes in ~10 seconds.

New: AI Old Photo Restoration

New AI-powered photo restoration tool that combines two neural networks in a single pipeline. Automatically colorizes black-and-white photos using Siggraph 2017 deep learning model, then enhances quality and sharpness with Real-ESRGAN at 2× resolution. One-click restoration for old, faded, and damaged photographs.

New: AI Object Removal

New AI-powered object removal tool using LaMa (Large Mask Inpainting) neural network. Paint over unwanted objects, people, text, or watermarks and the AI fills in the background naturally. Features smart crop-and-stitch processing for high-resolution results, mask dilation for clean edges, and feathered blending for seamless compositing. Use Continue Editing to chain multiple removals on the same image.

New: AI Photo Colorizer

New AI-powered colorization tool that automatically adds realistic colors to black-and-white photographs. Uses the Siggraph 2017 deep learning model by Richard Zhang et al. Upload any grayscale photo and get a naturally colorized result. Works best with portraits, landscapes, and historical photographs.

New: AI Passport Photo

New AI-powered passport photo tool. Upload any portrait photo and get a properly formatted passport-size image with white background. Uses AI background removal (U2Net) to isolate the subject and applies standard passport photo dimensions and formatting.

New: AI Image Denoiser

New AI-powered noise reduction tool that removes grain and noise from photos. Cleans up images shot in low light, high ISO, or with phone cameras. Uses Real-ESRGAN neural network optimized for noise reduction while preserving sharp details.

April 6, 2026

New: AI Speech to Text

New AI-powered speech-to-text tool using OpenAI Whisper. Transcribe audio and video files in 99 languages with automatic language detection. Output as plain text (TXT), SRT subtitles, or WebVTT. Two quality modes: Fast (~1 min) and Best (~3 min). Supports MP3, WAV, FLAC, OGG, M4A, MP4, MKV, and more.

New: AI Vocal Remover

New AI-powered vocal remover using Meta's Demucs Hybrid Transformer model. Separate any song into vocals and instrumental (karaoke), or extract all 4 stems: vocals, drums, bass, and other instruments. Two quality modes: Fast (~1-3 min) and Best (~5-10 min). Supports MP3, WAV, FLAC, OGG, M4A, AAC, and video files.

New: AI Photo Enhancer

New AI-powered photo enhancer that improves image quality, fixes blurry photos, removes noise, and restores lost details. Uses the same Real-ESRGAN neural network as the upscaler but optimized for quality improvement. Defaults to Quality model at 2x for best results.

New: AI Image Upscaler

New AI-powered image upscaler using Real-ESRGAN neural network. Enhance image resolution up to 4x with two models: Fast (~3 sec, good for most images) and Quality (~30 sec, best for photos). Supports JPG, PNG, WebP, BMP, TIFF. No registration or watermarks.

Fixed: Unit Converter PHP Warning

Fixed a PHP warning on unit converter pages (km-to-miles, miles-to-km, feet-to-m, etc.) caused by accessing an array offset on a false value when the converter pair was not found in the database.

Fixed: Animated WebP Multi-Frame Output

Fixed a bug where converting animated WebP files to static formats (PNG, JPG) could fail with “No output file produced” despite exit code 0. ImageMagick was splitting output into multiple frame files; the converter now detects and picks the best frame automatically.

Functie aanvragen

0 / 2000