Convert TIFF, JPEG, PNG, RAW, PSD, WebP and 35+ image formats on Windows servers — no codec packs required.
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016 / 2019/2022 Server
and
Docker / Citrix / Wine
Total Image Converter X is a server-side SDK that converts TIFF, JPEG, PNG, BMP, PSD, WebP, RAW (NEF, CR2, CR3, ARW, ORF, RAF, DNG, and more), and 35+ other image formats — without external codec packs or imaging frameworks on the server. It runs headless: no GUI, no dialogs, no popups. Total Image Converter X ships with both a command-line binary and an ActiveX/COM interface, so it drops into ASP, PHP, .NET, Python, Ruby, Java, and any other COM-aware backend. The full list of supported image formats:
The program processes images on the fly. No intermediate files are needed. Multi-threaded conversion engine maximizes throughput on multi-core servers.
High converting speed and batch conversions result in a simple and boredom-free process. Try it for free (30 days trial period, no limitations) and find out that it is really worth its money.
Some of the currently supported file format conversions:
|
|
|
LLM agents (Claude, ChatGPT, Cursor, Cline) and retrieval frameworks (LangChain, LlamaIndex, Haystack) cannot read pixels — they read text. Total Image Converter X runs OCR over your TIFF, JPEG, PNG, BMP, multi-page TIFF, PSD, WebP, and RAW image batches and writes the recognized text to GitHub-Flavored Markdown with structured frontmatter and an optional Docling-compatible sidecar, so scanned documents and screenshots land in your vector store as searchable text with page anchors and layout hints — not as opaque binary blobs.
What you get when you target Markdown output:
source_file, format (MIME), page_count, ocr_language, ocr_confidence_avg, dpi, color space (sRGB/CMYK), generator, created, and a binary_hash for provenance
.docling.json sidecar — Docling-schema JSON with table bounding rectangles, per-page anchors, per-region OCR confidence, EXIF metadata for camera images, and a chunks_hint array your splitter can read
This is the CoolUtils RAG Adapter — a unified Markdown contract shared by every Total Converter X product. Full specification, sample .md + .docling.json, and integration snippets live on the Coolutils Converter X — RAG Adapter page.
(includes 30 day FREE trial)
(only $259.90)
string src = @"C:\test\Source.tiff";
string dest = @"C:\test\Dest.jpg";
var cnv = new ImageConverterX();
cnv.Convert(src, dest, "-cJPG -log c:\\test\\Image.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\ImageConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.tiff";
var outPath = Path.GetTempFileName() + ".jpg";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{srcPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("ImageConverter.ImageConverterX")
C.Convert "c:\source.bmp", "c:\dest.tif", "-cTIFF -log c:\Image.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("ImageConverter.ImageConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.tiff", "C:\www\ASP", "-cpdf -log c:\Image.log")
set C = nothing
$src="C:\\test\\test.jpg";
$dest="C:\\test\\test.gif";
if (file_exists($dest)) unlink($dest);
$c= new COM("ImageConverter.ImageConverterX");
$c->convert($src,$dest, "-c gif -log c:\\test\\Image.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('ImageConverter.ImageConverterX')
src = "C:\\test\\test.tiff"
dest = "C:\\test\\test.jpg"
c.convert(src, dest, "-c JPG -log c:\\test\\Image.log")
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("ImageConverter.ImageConverterX")
src = "C:\\test\\test.tiff"
dest = "C:\\test\\test.jpg"
c.convert(src, dest, "-c JPG -log c:\\test\\Image.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('ImageConverter.ImageConverterX');
c.Convert('c:\test\source.tiff', 'c:\test\dest.jpg', '-cJPG -log c:\test\Image.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("ImageConverter.ImageConverterX");
c.Convert("C:\\test\\source.tiff", "C:\\test\\dest.jpg", "-c JPG");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.tiff"; my $dest = "C:\\test\\test.jpg"; my $c = CreateObject Win32::OLE 'ImageConverter.ImageConverterX'; $c->convert($src, $dest, "-c JPG -log c:\\test\\Image.log"); print $c->ErrorMessage if -e $dest;
"We accept customer artwork in every format imaginable: PSD with layers, CMYK TIFF for offset printing, PNG with transparency, the occasional RAW from photographers. Total Image Converter X normalizes everything to print-ready CMYK TIFF and a web-preview JPEG in one pipeline. Five years on the encoder boxes, no surprises. Throughput is around 40 images per second on our hardware for 24-megapixel input."
Erik W.
Senior Backend Developer at a print-on-demand platform
"Brokers upload listing photos straight from phones and DSLRs — HEIC, RAW, oversized JPEG, the lot. Total Image Converter X resizes to three responsive variants and writes WebP for the public-facing site. The .NET wrapper plugs into our existing pipeline; the -log output is one structured line per file, easy to ship to our log aggregator. Headless on Windows Server Core, no Office, no Photoshop, no licensing surprises."
Anjali K.
DevOps Engineer at a real-estate listings SaaS
"We archive scanned patient records as multi-page TIFF and need to publish PDF copies for the clinician portal. Total Image Converter X handles 600-DPI grayscale TIFF stacks reliably, applies the watermarks we need for audit trails, and produces ISO-standard PDF/A. The CLI is deterministic across runs, which matters for chain-of-custody. Five years of unattended overnight conversions, no failures we can blame on the converter."
Paolo M.
CTO at a medical-imaging archive
"Bundled Total Image Converter X into our photo-management product under the Royalty-Free License. The one-time per-project fee was a fraction of what ImageMagick-based commercial wrappers wanted for redistribution rights. Our installer ships and registers the ActiveX, our app calls it directly, end users see only our UI. The 32-bit ActiveX limitation cost us a couple of days of pipeline rework, but support was responsive when we asked about workarounds."
Greta H.
Independent Software Vendor
"Our merchants upload product photos in JPEG, PNG, and the occasional PSD with embedded layers. We need clean WebP at three sizes plus a thumbnail strip per product. Total Image Converter X gives us deterministic output: same input, same flags, bit-identical bytes on the disk. That's what we need for our CDN cache invalidation logic. Stable and predictable across four years of production use."
Hideo T.
Lead .NET Developer at an e-commerce platform
Updated Mon, 04 May 2026
(only $259.90)
new COM("ImageConverter.ImageConverterX") in PHP, new ImageConverterX() in .NET, win32com.client.Dispatch in Python, WIN32OLE.new in Ruby. Alternatively, the ImageConverterX.exe command-line binary can be invoked from any process, scheduler, or shell script. Direct PDF streaming via ConvertToStream is also available for ASP/PHP web responses.-r <WxH> for resize (absolute or percent), -Rotate <90|180|270> for rotation, -Flip Horizontal|Vertical for mirroring, and -c <format> for output. Watermarks: -WatermarkText "Confidential" -WatermarkColor 0xFF0000 for text or -WatermarkImage logo.png for image overlay. Color depth: -bpp 1|8|24. CMYK to RGB conversion is automatic when output format does not support CMYK.-MultipageTIFF to combine a folder of single-page images into one TIFF, and -combine to merge multiple images into one PDF. -Recurse walks subdirectories; -kfs mirrors the folder structure on the output side instead of flattening everything into one bucket..md as the output format and the converter runs OCR over the input image (TIFF, JPEG, PNG, BMP, multi-page TIFF, PSD, WebP, RAW) and writes the recognized text as GitHub-Flavored Markdown. Multi-page TIFF and image folders are processed as document sequences with each page becoming a section; detected tables are preserved as GFM tables instead of being flattened into prose. A YAML frontmatter block carries source_file, page_count, ocr_language, average ocr_confidence, source dpi and color space, plus a binary hash. This is part of the CoolUtils RAG Adapter — the same Markdown contract is shared by every Total Converter X product.binary_hash for provenance, and a chunks_hint array. Enable with -Docling on the command line. The JSON is independent of the Markdown..md file is plain GFM with a YAML frontmatter block, so LangChain's UnstructuredMarkdownLoader, LlamaIndex's MarkdownReader, Haystack's MarkdownToDocument, and Claude Code's MCP file tools read it directly. Because OCR confidence is recorded in the sidecar, downstream consumers can choose to drop or flag low-confidence regions before embedding. For Claude, ChatGPT, or any chat UI you can paste the Markdown into context as-is.ImageConverterX.exe "C:\scans\*.tif" "C:\rag\" -cMD -Docling -ocr -ocrlang eng -Recurse. -cMD selects Markdown; -Docling additionally writes the .docling.json sidecar; -ocr enables OCR; -ocrlang sets the OCR language (use multi-language strings like eng+rus for mixed-language scans); -Recurse walks subdirectories. Multi-page TIFFs are handled in a single call. The resulting Markdown is ready to chunk, embed, and index in any vector store.Updated Mon, 04 May 2026
(only $259.90)
Download free trial and convert your files in minutes.
No credit card or email required.