Please bookmark this page to avoid losing your image tool!

Image Based Software Program Identifier

(Free & Supports Bulk Upload)

Drag & drop your images here or

The result will appear here...
You can edit the below JavaScript code to customize the image tool.
function processImage(originalImg, language = 'eng') {
    // Escape RegExp helper
    function escapeRegExp(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    // Comprehensive list of common software programs to identify
    const softwareDb = [
        { id: "Adobe Photoshop", aliases: ["Photoshop", "Adobe Photoshop"] },
        { id: "Adobe Illustrator", aliases: ["Illustrator", "Adobe Illustrator"] },
        { id: "Adobe Premiere Pro", aliases: ["Premiere Pro", "Adobe Premiere"] },
        { id: "Adobe After Effects", aliases: ["After Effects"] },
        { id: "Microsoft Visual Studio", aliases: ["Visual Studio"] }, 
        { id: "Visual Studio Code", aliases: ["Visual Studio Code", "VS Code", "VSCode"] },
        { id: "Google Chrome", aliases: ["Chrome", "Google Chrome"] },
        { id: "Mozilla Firefox", aliases: ["Firefox", "Mozilla Firefox"] },
        { id: "Microsoft Edge", aliases: ["Microsoft Edge", "Edge Browser"] },
        { id: "Apple Safari", aliases: ["Safari"] },
        { id: "Microsoft Word", aliases: ["Microsoft Word", "Word"] },
        { id: "Microsoft Excel", aliases: ["Microsoft Excel", "Excel"] },
        { id: "Microsoft Powerpoint", aliases: ["Powerpoint", "Microsoft Powerpoint"] },
        { id: "Notepad++", aliases: ["Notepad++"] },
        { id: "Notepad", aliases: ["Notepad"] },
        { id: "Discord", aliases: ["Discord"] },
        { id: "Slack", aliases: ["Slack"] },
        { id: "Microsoft Teams", aliases: ["Microsoft Teams"] },
        { id: "Zoom", aliases: ["Zoom Meeting", "Zoom"] },
        { id: "Skype", aliases: ["Skype"] },
        { id: "OBS Studio", aliases: ["OBS Studio", "OBS"] },
        { id: "VLC Media Player", aliases: ["VLC", "VLC media player"] },
        { id: "Spotify", aliases: ["Spotify"] },
        { id: "Apple iTunes", aliases: ["iTunes"] },
        { id: "Steam", aliases: ["Steam"] },
        { id: "Epic Games Launcher", aliases: ["Epic Games Launcher", "Epic Games"] },
        { id: "IntelliJ IDEA", aliases: ["IntelliJ IDEA", "IntelliJ"] },
        { id: "JetBrains WebStorm", aliases: ["WebStorm"] },
        { id: "JetBrains PyCharm", aliases: ["PyCharm"] },
        { id: "Eclipse IDE", aliases: ["Eclipse"] },
        { id: "Android Studio", aliases: ["Android Studio"] },
        { id: "Apple Xcode", aliases: ["Xcode"] },
        { id: "Figma", aliases: ["Figma"] },
        { id: "Sketch", aliases: ["Sketch"] },
        { id: "Blender", aliases: ["Blender"] },
        { id: "Unity", aliases: ["Unity", "Unity Editor"] },
        { id: "Unreal Engine", aliases: ["Unreal Engine", "Unreal Editor"] },
        { id: "Godot Engine", aliases: ["Godot", "Godot Engine"] },
        { id: "GitHub Desktop", aliases: ["GitHub Desktop"] },
        { id: "Docker Desktop", aliases: ["Docker Desktop", "Docker"] },
        { id: "Postman", aliases: ["Postman"] },
        { id: "AutoCAD", aliases: ["AutoCAD"] },
        { id: "Autodesk Maya", aliases: ["Autodesk Maya", "Maya"] },
        { id: "Notion", aliases: ["Notion"] },
        { id: "Evernote", aliases: ["Evernote"] },
        { id: "Trello", aliases: ["Trello"] },
        { id: "Asana", aliases: ["Asana"] },
        { id: "Jira", aliases: ["Jira"] },
        { id: "Audacity", aliases: ["Audacity"] },
        { id: "FL Studio", aliases: ["FL Studio"] },
        { id: "Ableton Live", aliases: ["Ableton", "Ableton Live"] },
        { id: "Command Prompt", aliases: ["Command Prompt", "cmd.exe"] },
        { id: "Windows PowerShell", aliases: ["PowerShell"] },
        { id: "Terminal", aliases: ["Terminal"] }
    ];

    // Build the UI Container
    const container = document.createElement('div');
    container.style.fontFamily = 'system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif';
    container.style.maxWidth = '600px';
    container.style.margin = '0 auto';
    container.style.padding = '25px';
    container.style.backgroundColor = '#ffffff';
    container.style.borderRadius = '12px';
    container.style.boxShadow = '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)';
    container.style.color = '#1f2937';
    container.style.border = '1px solid #e5e7eb';

    const header = document.createElement('div');
    header.style.borderBottom = '2px solid #f3f4f6';
    header.style.paddingBottom = '15px';
    header.style.marginBottom = '20px';

    const title = document.createElement('h2');
    title.textContent = 'Software Program Identifier';
    title.style.margin = '0';
    title.style.fontSize = '1.5rem';
    title.style.color = '#111827';
    header.appendChild(title);

    const desc = document.createElement('p');
    desc.textContent = 'Analyzing image contents and text labels to detect visible software environments and applications...';
    desc.style.margin = '8px 0 0 0';
    desc.style.fontSize = '0.9rem';
    desc.style.color = '#6b7280';
    header.appendChild(desc);

    container.appendChild(header);

    const previewContainer = document.createElement('div');
    previewContainer.style.textAlign = 'center';
    previewContainer.style.marginBottom = '20px';
    previewContainer.style.backgroundColor = '#f9fafb';
    previewContainer.style.border = '1px dashed #d1d5db';
    previewContainer.style.padding = '10px';
    previewContainer.style.borderRadius = '8px';

    const imgClone = new Image();
    imgClone.src = originalImg.src;
    imgClone.style.maxWidth = '100%';
    imgClone.style.maxHeight = '250px';
    imgClone.style.objectFit = 'contain';
    imgClone.style.borderRadius = '4px';
    previewContainer.appendChild(imgClone);
    container.appendChild(previewContainer);

    const statusArea = document.createElement('div');
    statusArea.style.padding = '20px';
    statusArea.style.backgroundColor = '#f3f4f6';
    statusArea.style.borderRadius = '8px';
    statusArea.style.marginBottom = '20px';
    statusArea.style.textAlign = 'center';

    const statusSpinner = document.createElement('div');
    statusSpinner.style.display = 'inline-block';
    statusSpinner.style.width = '24px';
    statusSpinner.style.height = '24px';
    statusSpinner.style.border = '3px solid #d1d5db';
    statusSpinner.style.borderTopColor = '#3b82f6';
    statusSpinner.style.borderRadius = '50%';
    statusSpinner.style.marginBottom = '10px';
    statusSpinner.style.animation = 'spin 1s linear infinite';
    
    // Add spinner animation keyframes
    const styleSheet = document.createElement("style");
    styleSheet.innerText = `@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }`;
    document.head.appendChild(styleSheet);
    
    statusArea.appendChild(statusSpinner);

    const statusText = document.createElement('div');
    statusText.textContent = 'Initializing OCR detection engine...';
    statusText.style.fontWeight = '600';
    statusText.style.color = '#374151';
    statusArea.appendChild(statusText);

    const progressBarBg = document.createElement('div');
    progressBarBg.style.height = '6px';
    progressBarBg.style.width = '100%';
    progressBarBg.style.backgroundColor = '#e5e7eb';
    progressBarBg.style.borderRadius = '3px';
    progressBarBg.style.marginTop = '15px';
    progressBarBg.style.overflow = 'hidden';

    const progressBar = document.createElement('div');
    progressBar.style.height = '100%';
    progressBar.style.width = '0%';
    progressBar.style.backgroundColor = '#3b82f6';
    progressBar.style.transition = 'width 0.3s ease';
    progressBarBg.appendChild(progressBar);
    statusArea.appendChild(progressBarBg);

    container.appendChild(statusArea);

    const resultsArea = document.createElement('div');
    resultsArea.style.display = 'none';
    resultsArea.style.backgroundColor = '#f0fdf4';
    resultsArea.style.border = '1px solid #bbf7d0';
    resultsArea.style.borderRadius = '8px';
    resultsArea.style.padding = '20px';
    container.appendChild(resultsArea);

    const resultsTitle = document.createElement('h3');
    resultsTitle.textContent = 'Software Identified:';
    resultsTitle.style.marginTop = '0';
    resultsTitle.style.marginBottom = '15px';
    resultsTitle.style.color = '#166534';
    resultsArea.appendChild(resultsTitle);

    const resultsListContainer = document.createElement('div');
    resultsArea.appendChild(resultsListContainer);

    const rawTextArea = document.createElement('div');
    rawTextArea.style.marginTop = '20px';
    rawTextArea.style.padding = '15px';
    rawTextArea.style.backgroundColor = '#f9fafb';
    rawTextArea.style.border = '1px solid #e5e7eb';
    rawTextArea.style.borderRadius = '8px';
    rawTextArea.style.fontSize = '0.75rem';
    rawTextArea.style.maxHeight = '150px';
    rawTextArea.style.overflowY = 'auto';
    rawTextArea.style.whiteSpace = 'pre-wrap';
    rawTextArea.style.display = 'none';
    rawTextArea.style.color = '#6b7280';

    const rawTextTitle = document.createElement('strong');
    rawTextTitle.textContent = 'Background Extracted Text (Log View):';
    rawTextTitle.style.display = 'block';
    rawTextTitle.style.marginBottom = '8px';
    rawTextArea.appendChild(rawTextTitle);

    const rawTextContent = document.createElement('span');
    rawTextArea.appendChild(rawTextContent);
    container.appendChild(rawTextArea);

    // Self-invoking async function to process image using Tesseract.js
    (async () => {
        try {
            // Dynamically load Tesseract.js if it isn't available
            if (!window.Tesseract) {
                statusText.textContent = 'Downloading OCR Library (Tesseract.js)...';
                await new Promise((resolve, reject) => {
                    const script = document.createElement('script');
                    script.src = 'https://cdn.jsdelivr.net/npm/tesseract.js@4/dist/tesseract.min.js';
                    script.onload = resolve;
                    script.onerror = () => reject(new Error('Failed to load text recognition framework.'));
                    document.head.appendChild(script);
                });
            }

            statusText.textContent = 'Analyzing image context...';

            const result = await window.Tesseract.recognize(
                originalImg,
                language,
                {
                    logger: m => {
                        if (m.status === 'recognizing text') {
                            const prog = Math.round(m.progress * 100);
                            progressBar.style.width = `${prog}%`;
                            statusText.textContent = `Scanning identifiers: ${prog}%`;
                        } else {
                            statusText.textContent = m.status.replace(/^\w/, c => c.toUpperCase()) + "...";
                        }
                    }
                }
            );

            // Hide status area and show results
            statusArea.style.display = 'none';
            resultsArea.style.display = 'block';
            rawTextArea.style.display = 'block';

            const text = result.data.text;
            rawTextContent.textContent = text || "No explicit text patterns found in image.";

            // Identify software by regex boundaries
            const detected = new Set();
            softwareDb.forEach(sw => {
                sw.aliases.forEach(alias => {
                    // Match whole words to prevent false positives (handles special characters like +)
                    const regex = new RegExp(`(?:^|\\W)${escapeRegExp(alias)}(?:$|\\W)`, 'i');
                    if (regex.test(text)) {
                        detected.add(sw.id);
                    }
                });
            });

            if (detected.size === 0) {
                resultsArea.style.backgroundColor = '#fef2f2';
                resultsArea.style.borderColor = '#fecaca';
                resultsTitle.style.color = '#991b1b';
                resultsTitle.textContent = 'No Identifications Found';
                resultsListContainer.textContent = 'No known software identities could be automatically matched in the text extracted from this image.';
            } else {
                detected.forEach(software => {
                    const badge = document.createElement('span');
                    badge.textContent = software;
                    badge.style.display = 'inline-block';
                    badge.style.backgroundColor = '#dcfce7';
                    badge.style.color = '#166534';
                    badge.style.border = '1px solid #86efac';
                    badge.style.padding = '6px 14px';
                    badge.style.borderRadius = '20px';
                    badge.style.margin = '4px';
                    badge.style.fontWeight = '600';
                    badge.style.fontSize = '0.9rem';
                    badge.style.boxShadow = '0 1px 2px rgba(0,0,0,0.05)';
                    resultsListContainer.appendChild(badge);
                });
            }
        } catch (err) {
            statusSpinner.style.display = 'none';
            statusText.textContent = `Processing Error: ${err.message}`;
            statusText.style.color = '#dc2626';
            progressBarBg.style.display = 'none';
        }
    })();

    // Synchronously return the dynamically updating container
    return container;
}

Free Image Tool Creator

Can't find the image tool you're looking for?
Create one based on your own needs now!

Description

This tool uses OCR (Optical Character Recognition) technology to analyze images and identify visible software applications. By scanning text labels and interface elements within an uploaded image, it can detect a wide range of programs including creative suites, web browsers, development environments, office tools, and communication platforms. This tool is useful for cataloging software environments from screenshots, identifying tools used in tutorials or workflows, and verifying application usage in visual documentation.

Leave a Reply

Your email address will not be published. Required fields are marked *