{"id":607,"date":"2026-07-22T14:47:51","date_gmt":"2026-07-22T14:47:51","guid":{"rendered":"https:\/\/freewebtools.co.in\/?page_id=607"},"modified":"2026-07-25T16:25:08","modified_gmt":"2026-07-25T16:25:08","slug":"caption-generator","status":"publish","type":"page","link":"https:\/\/freewebtools.co.in\/index.php\/caption-generator\/","title":{"rendered":"Caption Generator"},"content":{"rendered":"\n<div class=\"fwt-caption-wrapper\" id=\"fwtCaptionWrapper\">\n    <style>\n        .fwt-caption-wrapper {\n            all: initial;\n            display: block;\n            font-family: system-ui, -apple-system, sans-serif;\n            color: var(--fwt-caption-text, #1e293b);\n            background-color: var(--fwt-caption-bg, #f8fafc);\n            padding: 24px;\n            box-sizing: border-box;\n            width: 100%;\n            max-width: 1200px;\n            margin: 0 auto;\n            border-radius: 20px;\n            border: 1px solid var(--fwt-caption-border, #e2e8f0);\n            box-shadow: 0 10px 25px rgba(0,0,0,0.05);\n            transition: background-color 0.3s, color 0.3s;\n        }\n        .fwt-caption-wrapper *, .fwt-caption-wrapper *::before, .fwt-caption-wrapper *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n        .fwt-caption-container {\n            display: flex;\n            flex-direction: column;\n            gap: 20px;\n        }\n        .fwt-caption-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 15px;\n        }\n        .fwt-caption-title {\n            font-size: 1.75rem;\n            font-weight: 800;\n            background: linear-gradient(135deg, #2563eb, #9333ea);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n        }\n        .fwt-caption-theme-btn {\n            background: var(--fwt-caption-panel-bg, #ffffff);\n            border: 1px solid var(--fwt-caption-border, #cbd5e1);\n            color: var(--fwt-caption-text, #1e293b);\n            padding: 8px 16px;\n            border-radius: 10px;\n            cursor: pointer;\n            font-weight: 600;\n            transition: all 0.2s;\n        }\n        .fwt-caption-theme-btn:hover { background: var(--fwt-caption-hover, #f1f5f9); }\n\n        .fwt-caption-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 20px;\n        }\n        @media(max-width: 900px) {\n            .fwt-caption-grid { grid-template-columns: 1fr; }\n        }\n\n        .fwt-caption-panel {\n            background: var(--fwt-caption-panel-bg, #ffffff);\n            padding: 20px;\n            border-radius: 16px;\n            border: 1px solid var(--fwt-caption-border, #e2e8f0);\n            display: flex;\n            flex-direction: column;\n            gap: 15px;\n            box-shadow: 0 4px 6px rgba(0,0,0,0.02);\n        }\n        .fwt-caption-group {\n            display: flex;\n            flex-direction: column;\n            gap: 6px;\n        }\n        .fwt-caption-label {\n            font-size: 0.85rem;\n            font-weight: 600;\n            color: var(--fwt-caption-label, #64748b);\n            display: flex;\n            justify-content: space-between;\n        }\n        .fwt-caption-input, .fwt-caption-select, .fwt-caption-textarea {\n            width: 100%;\n            padding: 12px;\n            border-radius: 10px;\n            border: 1px solid var(--fwt-caption-border, #cbd5e1);\n            font-size: 0.95rem;\n            outline: none;\n            background: var(--fwt-caption-input-bg, #f8fafc);\n            color: var(--fwt-caption-text, #1e293b);\n            transition: border-color 0.2s;\n        }\n        .fwt-caption-input:focus, .fwt-caption-select:focus, .fwt-caption-textarea:focus { border-color: #2563eb; }\n        .fwt-caption-textarea { resize: vertical; min-height: 90px; }\n\n        .fwt-caption-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 10px;\n        }\n        .fwt-caption-checkbox-group {\n            display: flex;\n            gap: 15px;\n            align-items: center;\n            font-size: 0.9rem;\n            font-weight: 500;\n            color: var(--fwt-caption-text, #1e293b);\n        }\n        .fwt-caption-checkbox-group label {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            cursor: pointer;\n        }\n\n        .fwt-caption-actions {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 10px;\n        }\n        .fwt-caption-btn {\n            background: #2563eb;\n            color: white;\n            border: none;\n            padding: 12px 18px;\n            border-radius: 10px;\n            font-weight: 700;\n            cursor: pointer;\n            transition: background 0.2s, transform 0.1s;\n            font-size: 0.9rem;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            flex: 1;\n            justify-content: center;\n        }\n        .fwt-caption-btn:hover { background: #1d4ed8; }\n        .fwt-caption-btn:active { transform: scale(0.98); }\n        .fwt-caption-btn-secondary { background: #475569; flex: unset; }\n        .fwt-caption-btn-secondary:hover { background: #334155; }\n\n        .fwt-caption-results-list {\n            display: flex;\n            flex-direction: column;\n            gap: 15px;\n            max-height: 700px;\n            overflow-y: auto;\n            padding-right: 5px;\n        }\n        .fwt-caption-card {\n            background: var(--fwt-caption-card-bg, #f8fafc);\n            border: 1px solid var(--fwt-caption-border, #e2e8f0);\n            border-radius: 12px;\n            padding: 16px;\n            display: flex;\n            flex-direction: column;\n            gap: 10px;\n            position: relative;\n        }\n        .fwt-caption-card-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n        .fwt-caption-card-title {\n            font-size: 0.8rem;\n            font-weight: 700;\n            color: #2563eb;\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n        }\n        .fwt-caption-output-box {\n            font-size: 0.95rem;\n            line-height: 1.5;\n            background: var(--fwt-caption-panel-bg, #ffffff);\n            padding: 12px;\n            border-radius: 8px;\n            border: 1px solid var(--fwt-caption-border, #e2e8f0);\n            white-space: pre-wrap;\n            word-break: break-word;\n            color: var(--fwt-caption-text, #1e293b);\n        }\n        .fwt-caption-card-footer {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 10px;\n        }\n        .fwt-caption-meta {\n            font-size: 0.75rem;\n            color: var(--fwt-caption-label, #64748b);\n        }\n        .fwt-caption-card-btns {\n            display: flex;\n            gap: 8px;\n        }\n        .fwt-caption-mini-btn {\n            background: #2563eb;\n            color: white;\n            border: none;\n            padding: 6px 12px;\n            border-radius: 6px;\n            font-size: 0.75rem;\n            font-weight: 600;\n            cursor: pointer;\n            transition: background 0.2s;\n        }\n        .fwt-caption-mini-btn:hover { background: #1d4ed8; }\n\n        .fwt-caption-toast {\n            position: fixed;\n            bottom: 20px;\n            right: 20px;\n            background: #0f172a;\n            color: white;\n            padding: 10px 20px;\n            border-radius: 8px;\n            font-size: 0.9rem;\n            box-shadow: 0 5px 15px rgba(0,0,0,0.2);\n            opacity: 0;\n            transition: opacity 0.3s;\n            pointer-events: none;\n            z-index: 9999;\n        }\n        .fwt-caption-toast.show { opacity: 1; }\n\n        @media(prefers-color-scheme: dark) {\n            .fwt-caption-wrapper[data-theme=\"auto\"] {\n                --fwt-caption-bg: #0f172a;\n                --fwt-caption-panel-bg: #1e293b;\n                --fwt-caption-card-bg: #0f172a;\n                --fwt-caption-text: #f8fafc;\n                --fwt-caption-border: #334155;\n                --fwt-caption-input-bg: #0f172a;\n                --fwt-caption-label: #94a3b8;\n                --fwt-caption-hover: #334155;\n            }\n        }\n        .fwt-caption-wrapper[data-theme=\"dark\"] {\n            --fwt-caption-bg: #0f172a;\n            --fwt-caption-panel-bg: #1e293b;\n            --fwt-caption-card-bg: #0f172a;\n            --fwt-caption-text: #f8fafc;\n            --fwt-caption-border: #334155;\n            --fwt-caption-input-bg: #0f172a;\n            --fwt-caption-label: #94a3b8;\n            --fwt-caption-hover: #334155;\n        }\n        .fwt-caption-wrapper[data-theme=\"light\"] {\n            --fwt-caption-bg: #f8fafc;\n            --fwt-caption-panel-bg: #ffffff;\n            --fwt-caption-card-bg: #f8fafc;\n            --fwt-caption-text: #1e293b;\n            --fwt-caption-border: #e2e8f0;\n            --fwt-caption-input-bg: #f8fafc;\n            --fwt-caption-label: #64748b;\n            --fwt-caption-hover: #f1f5f9;\n        }\n    <\/style>\n\n    <div class=\"fwt-caption-container\" data-theme=\"auto\">\n        <div class=\"fwt-caption-header\">\n            <h2 class=\"fwt-caption-title\">\u270d\ufe0f Professional Caption Maker &#038; Generator<\/h2>\n            <button type=\"button\" class=\"fwt-caption-theme-btn\" id=\"fwtThemeToggle\">Toggle Theme<\/button>\n        <\/div>\n\n        <div class=\"fwt-caption-grid\">\n            <div class=\"fwt-caption-panel\">\n                <div class=\"fwt-caption-group\">\n                    <label class=\"fwt-caption-label\" for=\"fwtTopicInput\">Main Topic \/ Subject<\/label>\n                    <input type=\"text\" id=\"fwtTopicInput\" class=\"fwt-caption-input\" placeholder=\"e.g. Sunset at the beach, coding late night...\">\n                <\/div>\n\n                <div class=\"fwt-caption-row\">\n                    <div class=\"fwt-caption-group\">\n                        <label class=\"fwt-caption-label\" for=\"fwtCategorySelect\">Category<\/label>\n                        <select id=\"fwtCategorySelect\" class=\"fwt-caption-select\">\n                            <option value=\"Travel\">Travel<\/option>\n                            <option value=\"Food\">Food<\/option>\n                            <option value=\"Fitness\">Fitness<\/option>\n                            <option value=\"Business\">Business<\/option>\n                            <option value=\"Marketing\">Marketing<\/option>\n                            <option value=\"Technology\">Technology<\/option>\n                            <option value=\"Coding\">Coding<\/option>\n                            <option value=\"AI\">AI<\/option>\n                            <option value=\"Gaming\">Gaming<\/option>\n                            <option value=\"Motivation\">Motivation<\/option>\n                            <option value=\"Success\">Success<\/option>\n                            <option value=\"Lifestyle\">Lifestyle<\/option>\n                            <option value=\"Love\">Love<\/option>\n                            <option value=\"Fashion\">Fashion<\/option>\n                            <option value=\"Crypto\">Crypto<\/option>\n                            <option value=\"Startup\">Startup<\/option>\n                            <option value=\"Custom Topic\" selected>Custom Topic<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"fwt-caption-group\">\n                        <label class=\"fwt-caption-label\" for=\"fwtToneSelect\">Tone<\/label>\n                        <select id=\"fwtToneSelect\" class=\"fwt-caption-select\">\n                            <option value=\"Professional\" selected>Professional<\/option>\n                            <option value=\"Funny\">Funny<\/option>\n                            <option value=\"Casual\">Casual<\/option>\n                            <option value=\"Luxury\">Luxury<\/option>\n                            <option value=\"Minimal\">Minimal<\/option>\n                            <option value=\"Motivational\">Motivational<\/option>\n                            <option value=\"Emotional\">Emotional<\/option>\n                            <option value=\"Inspirational\">Inspirational<\/option>\n                            <option value=\"Friendly\">Friendly<\/option>\n                            <option value=\"Confident\">Confident<\/option>\n                            <option value=\"Bold\">Bold<\/option>\n                            <option value=\"Creative\">Creative<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"fwt-caption-row\">\n                    <div class=\"fwt-caption-group\">\n                        <label class=\"fwt-caption-label\" for=\"fwtPlatformSelect\">Platform<\/label>\n                        <select id=\"fwtPlatformSelect\" class=\"fwt-caption-select\">\n                            <option value=\"Instagram\" selected>Instagram<\/option>\n                            <option value=\"Facebook\">Facebook<\/option>\n                            <option value=\"Threads\">Threads<\/option>\n                            <option value=\"Twitter \/ X\">Twitter \/ X<\/option>\n                            <option value=\"LinkedIn\">LinkedIn<\/option>\n                            <option value=\"YouTube\">YouTube<\/option>\n                            <option value=\"TikTok\">TikTok<\/option>\n                            <option value=\"Pinterest\">Pinterest<\/option>\n                            <option value=\"WhatsApp\">WhatsApp<\/option>\n                            <option value=\"Telegram\">Telegram<\/option>\n                            <option value=\"Discord\">Discord<\/option>\n                        <\/select>\n                    <\/div>\n                    <div class=\"fwt-caption-group\">\n                        <label class=\"fwt-caption-label\" for=\"fwtLanguageSelect\">Language<\/label>\n                        <select id=\"fwtLanguageSelect\" class=\"fwt-caption-select\">\n                            <option value=\"English\" selected>English<\/option>\n                            <option value=\"Roman Hindi\">Roman Hindi<\/option>\n                            <option value=\"Hindi\">Hindi<\/option>\n                            <option value=\"Mixed English + Hindi\">Mixed English + Hindi<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div class=\"fwt-caption-group\">\n                    <label class=\"fwt-caption-label\" for=\"fwtKeywordsInput\">Keywords (comma separated)<\/label>\n                    <input type=\"text\" id=\"fwtKeywordsInput\" class=\"fwt-caption-input\" placeholder=\"e.g. sunset, peace, vibes...\">\n                <\/div>\n\n                <div class=\"fwt-caption-group\">\n                    <label class=\"fwt-caption-label\" for=\"fwtBrandInput\">Brand Name \/ Handle (Optional)<\/label>\n                    <input type=\"text\" id=\"fwtBrandInput\" class=\"fwt-caption-input\" placeholder=\"e.g. @yourbrand\">\n                <\/div>\n\n                <div class=\"fwt-caption-checkbox-group\">\n                    <label><input type=\"checkbox\" id=\"fwtEmojiToggle\" checked> Include Emojis<\/label>\n                    <label><input type=\"checkbox\" id=\"fwtHashtagToggle\" checked> Include Hashtags<\/label>\n                    <label><input type=\"checkbox\" id=\"fwtCtaToggle\" checked> Include CTA<\/label>\n                <\/div>\n\n                <div class=\"fwt-caption-actions\">\n                    <button type=\"button\" class=\"fwt-caption-btn\" id=\"fwtGenerateBtn\">\u2728 Generate Captions<\/button>\n                    <button type=\"button\" class=\"fwt-caption-btn fwt-caption-btn-secondary\" id=\"fwtClearBtn\">Clear<\/button>\n                <\/div>\n            <\/div>\n\n            <div class=\"fwt-caption-panel\">\n                <div style=\"display:flex; justify-content:space-between; align-items:center;\">\n                    <h3 style=\"font-size:1.1rem; font-weight:700;\">Generated Results<\/h3>\n                    <div style=\"display:flex; gap:8px;\">\n                        <button type=\"button\" class=\"fwt-caption-mini-btn\" id=\"fwtCopyAllBtn\">Copy All<\/button>\n                        <button type=\"button\" class=\"fwt-caption-mini-btn fwt-caption-btn-secondary\" id=\"fwtDownloadBtn\">Export TXT<\/button>\n                        <button type=\"button\" class=\"fwt-caption-mini-btn fwt-caption-btn-secondary\" id=\"fwtShareBtn\">Share<\/button>\n                    <\/div>\n                <\/div>\n                <div class=\"fwt-caption-results-list\" id=\"fwtResultsList\">\n                    <div style=\"text-align:center; color:#64748b; padding:40px 0;\">Click &#8220;Generate Captions&#8221; to create professional captions instantly!<\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"fwt-caption-toast\" id=\"fwtToast\">Copied to clipboard!<\/div>\n<\/div>\n\n<script>\n(() => {\n    \"use strict\";\n\n    const config = {\n        darkMode: \"auto\",\n        defaultLanguage: \"English\",\n        defaultPlatform: \"Instagram\",\n        defaultTone: \"Professional\",\n        hashtagsCount: 20,\n        animations: true\n    };\n\n    const root = document.getElementById('fwtCaptionWrapper');\n    const container = root.querySelector('.fwt-caption-container');\n    const topicInput = root.querySelector('#fwtTopicInput');\n    const categorySelect = root.querySelector('#fwtCategorySelect');\n    const toneSelect = root.querySelector('#fwtToneSelect');\n    const platformSelect = root.querySelector('#fwtPlatformSelect');\n    const languageSelect = root.querySelector('#fwtLanguageSelect');\n    const keywordsInput = root.querySelector('#fwtKeywordsInput');\n    const brandInput = root.querySelector('#fwtBrandInput');\n    const emojiToggle = root.querySelector('#fwtEmojiToggle');\n    const hashtagToggle = root.querySelector('#fwtHashtagToggle');\n    const ctaToggle = root.querySelector('#fwtCtaToggle');\n    const generateBtn = root.querySelector('#fwtGenerateBtn');\n    const clearBtn = root.querySelector('#fwtClearBtn');\n    const copyAllBtn = root.querySelector('#fwtCopyAllBtn');\n    const downloadBtn = root.querySelector('#fwtDownloadBtn');\n    const shareBtn = root.querySelector('#fwtShareBtn');\n    const resultsList = root.querySelector('#fwtResultsList');\n    const themeToggle = root.querySelector('#fwtThemeToggle');\n    const toast = root.querySelector('#fwtToast');\n\n    let lastGeneratedData = [];\n\n    const showToast = (msg) => {\n        toast.textContent = msg;\n        toast.classList.add('show');\n        setTimeout(() => toast.classList.remove('show'), 2000);\n    };\n\n    const escapeHtml = (str) => {\n        return str.replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\");\n    };\n\n    const templates = {\n        Professional: [\n            \"Excited to share insights on {topic}. {keywords} Let's build something exceptional together.\",\n            \"Navigating new horizons in {topic} with absolute precision and focus. {keywords}\",\n            \"Excellence is not an act, but a habit, especially when dealing with {topic}. {keywords}\"\n        ],\n        Funny: [\n            \"My relationship status with {topic}: It's complicated, but we have coffee. {keywords} \ud83d\ude02\",\n            \"I was going to be productive today, but then {topic} happened. {keywords} \ud83d\ude43\",\n            \"Pro tip: Always pretend you know what you're doing when it comes to {topic}. {keywords}\"\n        ],\n        Casual: [\n            \"Just another day exploring the wonderful world of {topic}. {keywords} \u2728\",\n            \"Keeping things simple and authentic with {topic}. What's your take? {keywords}\",\n            \"Taking a moment to appreciate {topic} today. Good vibes only! {keywords}\"\n        ],\n        Luxury: [\n            \"Elevating standards and embracing elegance through {topic}. {keywords} \ud83d\udc51\",\n            \"Where sophistication meets passion: exploring the world of {topic}. {keywords}\",\n            \"Timeless moments defined by luxury and dedication to {topic}. {keywords} \u2728\"\n        ],\n        Minimal: [\n            \"Focus on {topic}. {keywords}\",\n            \"Pure focus. {topic}. {keywords}\",\n            \"Simply {topic}. {keywords}\"\n        ],\n        Motivational: [\n            \"Your journey with {topic} starts with a single bold step. {keywords} \ud83d\ude80\",\n            \"Never stop pushing boundaries when it comes to {topic}. Greatness awaits! {keywords}\",\n            \"Turn your dreams into reality through relentless dedication to {topic}. {keywords}\ud83d\udcaa\"\n        ],\n        Emotional: [\n            \"Some moments change the way we look at {topic} forever. {keywords} \ud83d\udcab\",\n            \"Finding deep meaning and soul in the little things about {topic}. {keywords}\",\n            \"Heartfelt moments that remind us why {topic} matters so much. {keywords}\"\n        ],\n        Inspirational: [\n            \"Dream big, stay focused, and master {topic}. {keywords} \ud83c\udf1f\",\n            \"Every expert in {topic} started as a passionate beginner. Keep going! {keywords}\",\n            \"Let your passion for {topic} light the path for others. {keywords}\"\n        ],\n        Friendly: [\n            \"Hey friends! Let's talk about {topic} today. What do you think? {keywords} \ud83d\udc4b\",\n            \"Sending positive energy your way as we explore {topic} together! {keywords}\",\n            \"Always love sharing my journey with {topic} with all of you! {keywords}\"\n        ],\n        Confident: [\n            \"Unstoppable focus and unmatched energy when it comes to {topic}. {keywords} \ud83d\udd25\",\n            \"Leading the way in {topic} with confidence and vision. {keywords}\",\n            \"Mastering {topic} isn't just a goal, it's a standard. {keywords}\"\n        ],\n        Bold: [\n            \"Breaking all the rules and redefining {topic}. Are you ready? {keywords} \u26a1\",\n            \"No apologies, just pure passion and fearless action in {topic}. {keywords}\",\n            \"Stand out or step aside. {topic} done our way. {keywords}\"\n        ],\n        Creative: [\n            \"Painting new ideas and crafting fresh perspectives on {topic}. {keywords} \ud83c\udfa8\",\n            \"Imagination meets execution in this latest take on {topic}. {keywords}\",\n            \"Thinking outside the box and redefining {topic}. {keywords} \u2728\"\n        ]\n    };\n\n    const emojisList = ['\u2728', '\ud83d\ude80', '\ud83d\udca1', '\ud83d\udd25', '\ud83d\udcab', '\ud83c\udfaf', '\ud83c\udf1f', '\ud83d\udcaa', '\ud83d\udc51', '\ud83d\ude4c', '\ud83c\udfa8', '\u26a1', '\ud83c\udf0a', '\ud83c\udf3f', '\u2615'];\n    const ctaList = [\n        \"Follow us for more updates!\",\n        \"Save this post for later!\",\n        \"Drop a comment below with your thoughts!\",\n        \"Like and share with a friend!\",\n        \"Visit our website via link in bio!\",\n        \"Click the link to learn more!\"\n    ];\n\n    const generateHashtags = (topic, category) => {\n        const base = topic.replace(\/[^a-zA-Z0-9]\/g, '');\n        const tags = [\n            `#${base || 'trending'}`,\n            `#${category.toLowerCase().replace(\/\\s+\/g, '')}`,\n            '#viral', '#explore', '#contentcreator', '#dailylife', '#inspiration',\n            '#instagood', '#trendingnow', '#community', '#growth', '#lifestyle',\n            '#success', '#motivation', '#passion', '#goals', '#future', '#vision',\n            '#creativity', '#excellence', '#mindset', '#strategy'\n        ];\n        return tags.join(' ');\n    };\n\n    const generateCaptions = () => {\n        const topic = topicInput.value.trim() || 'this amazing moment';\n        const category = categorySelect.value;\n        const tone = toneSelect.value;\n        const platform = platformSelect.value;\n        const lang = languageSelect.value;\n        const keywords = keywordsInput.value.trim() ? `Keywords: ${keywordsInput.value.trim()}` : '';\n        const brand = brandInput.value.trim() ? `\\n\\nCredit: ${brandInput.value.trim()}` : '';\n        const useEmoji = emojiToggle.checked;\n        const useHashtag = hashtagToggle.checked;\n        const useCta = ctaToggle.checked;\n\n        const toneTemplates = templates[tone] || templates['Professional'];\n        const results = [];\n\n        const formats = [\n            { name: \"Short & Punchy\", multiplier: 1 },\n            { name: \"Medium Engaging\", multiplier: 2 },\n            { name: \"Long Storyteller\", multiplier: 3 },\n            { name: \"SEO & Viral Style\", multiplier: 2.5 }\n        ];\n\n        formats.forEach((fmt, idx) => {\n            let template = toneTemplates[idx % toneTemplates.length];\n            let body = template.replace('{topic}', topic).replace('{keywords}', keywords);\n\n            if (lang === 'Roman Hindi') {\n                body = `Yeh dekho! Bahut hi shaandar ${topic} hai. ${keywords}`;\n            } else if (lang === 'Hindi') {\n                body = `\u0926\u0947\u0916\u093f\u090f \u0915\u092e\u093e\u0932 \u0915\u093e ${topic}! ${keywords}`;\n            } else if (lang === 'Mixed English + Hindi') {\n                body = `Awesome vibe around ${topic} hai yaar! ${keywords}`;\n            }\n\n            if (useEmoji) {\n                const em1 = emojisList[Math.floor(Math.random() * emojisList.length)];\n                const em2 = emojisList[Math.floor(Math.random() * emojisList.length)];\n                body = `${em1} ${body} ${em2}`;\n            }\n\n            if (useCta) {\n                const cta = ctaList[Math.floor(Math.random() * ctaList.length)];\n                body += `\\n\\n\ud83d\udc49 ${cta}`;\n            }\n\n            if (useHashtag) {\n                const tags = generateHashtags(topic, category);\n                body += `\\n\\n${tags}`;\n            }\n\n            body += brand;\n\n            const wordCount = body.split(\/\\s+\/).length;\n            const charCount = body.length;\n            const readTime = Math.ceil(wordCount \/ 200 * 60);\n\n            results.push({\n                title: fmt.name,\n                text: body,\n                meta: `${platform} \u2022 ${wordCount} words \u2022 ${charCount} chars \u2022 ~${readTime}s read`\n            });\n        });\n\n        lastGeneratedData = results;\n        renderResults(results);\n    };\n\n    const renderResults = (results) => {\n        resultsList.innerHTML = '';\n        results.forEach((res, i) => {\n            const card = document.createElement('div');\n            card.className = 'fwt-caption-card';\n            card.innerHTML = `\n                <div class=\"fwt-caption-card-header\">\n                    <span class=\"fwt-caption-card-title\">${res.title}<\/span>\n                <\/div>\n                <div class=\"fwt-caption-output-box\">${escapeHtml(res.text)}<\/div>\n                <div class=\"fwt-caption-card-footer\">\n                    <span class=\"fwt-caption-meta\">${res.meta}<\/span>\n                    <div class=\"fwt-caption-card-btns\">\n                        <button type=\"button\" class=\"fwt-caption-mini-btn\" data-index=\"${i}\">Copy<\/button>\n                    <\/div>\n                <\/div>\n            `;\n\n            card.querySelector('button').onclick = () => {\n                navigator.clipboard.writeText(res.text);\n                showToast(`Copied \"${res.title}\" to clipboard!`);\n            };\n\n            resultsList.appendChild(card);\n        });\n    };\n\n    generateBtn.onclick = generateCaptions;\n\n    clearBtn.onclick = () => {\n        topicInput.value = '';\n        keywordsInput.value = '';\n        brandInput.value = '';\n        resultsList.innerHTML = `<div style=\"text-align:center; color:#64748b; padding:40px 0;\">Click \"Generate Captions\" to create professional captions instantly!<\/div>`;\n        lastGeneratedData = [];\n    };\n\n    copyAllBtn.onclick = () => {\n        if (!lastGeneratedData.length) {\n            showToast(\"No captions generated yet!\");\n            return;\n        }\n        const allText = lastGeneratedData.map(r => `--- ${r.title} ---\\n${r.text}\\n`).join('\\n');\n        navigator.clipboard.writeText(allText);\n        showToast(\"Copied all generated captions!\");\n    };\n\n    downloadBtn.onclick = () => {\n        if (!lastGeneratedData.length) {\n            showToast(\"No captions generated yet!\");\n            return;\n        }\n        const allText = lastGeneratedData.map(r => `--- ${r.title} ---\\n${r.text}\\n`).join('\\n');\n        const blob = new Blob([allText], { type: 'text\/plain' });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement('a');\n        a.href = url;\n        a.download = 'generated-captions.txt';\n        a.click();\n        URL.revokeObjectURL(url);\n    };\n\n    shareBtn.onclick = async () => {\n        if (!lastGeneratedData.length) {\n            showToast(\"No captions generated yet!\");\n            return;\n        }\n        if (navigator.share) {\n            try {\n                await navigator.share({\n                    title: 'Generated Captions',\n                    text: lastGeneratedData[0].text\n                });\n            } catch (err) {}\n        } else {\n            showToast(\"Web Share API not supported on this browser.\");\n        }\n    };\n\n    themeToggle.onclick = () => {\n        const current = container.getAttribute('data-theme');\n        const nextTheme = current === 'dark' ? 'light' : 'dark';\n        container.setAttribute('data-theme', nextTheme);\n    };\n\n    generateCaptions();\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u270d\ufe0f Professional Caption Maker &#038; Generator Toggle Theme Main Topic \/ Subject Category TravelFoodFitnessBusinessMarketingTechnologyCodingAIGamingMotivationSuccessLifestyleLoveFashionCryptoStartupCustom Topic Tone ProfessionalFunnyCasualLuxuryMinimalMotivationalEmotionalInspirationalFriendlyConfidentBoldCreative Platform InstagramFacebookThreadsTwitter \/ XLinkedInYouTubeTikTokPinterestWhatsAppTelegramDiscord Language EnglishRoman HindiHindiMixed English + Hindi Keywords (comma separated) Brand Name \/ Handle (Optional) Include Emojis Include Hashtags Include CTA \u2728 Generate Captions Clear Generated Results Copy All Export TXT Share Click &#8220;Generate Captions&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-607","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/comments?post=607"}],"version-history":[{"count":1,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/607\/revisions"}],"predecessor-version":[{"id":608,"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/pages\/607\/revisions\/608"}],"wp:attachment":[{"href":"https:\/\/freewebtools.co.in\/index.php\/wp-json\/wp\/v2\/media?parent=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}