Under Maintenance


Bhava Analyser — Natya-Shastra.in :root{ –bg:#f5f0e8;–surface:#fff;–header:#1c1c2e;–accent:#c0392b; –gold:#c9933a;–text:#1c1c2e;–muted:#6b6b80;–border:#ddd5c8; –tag-bg:#fdf3e3;–tag-text:#8b4513; –teal:#1a6b5e;–teal-light:#e8f5f2; } *{box-sizing:border-box;margin:0;padding:0;} body{font-family:’Inter’,sans-serif;background:var(–bg);color:var(–text);min-height:100vh;} .ns-header{background:var(–header);padding:22px 24px 18px;text-align:center;border-bottom:3px solid var(–gold);} .ns-logo-row{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:4px;} .ns-logo-img{width:52px;height:52px;object-fit:contain;} .ns-title{color:var(–gold);font-size:1.35rem;font-weight:700;letter-spacing:.04em;line-height:1.2;} .ns-title span{display:block;font-size:.72rem;font-weight:400;color:#a0a0b8;letter-spacing:.12em;text-transform:uppercase;margin-top:2px;} .ns-sub{color:#a0a0b8;font-size:.75rem;margin-top:6px;font-style:italic;} .ns-usage{background:#fdf7ee;border-bottom:1px solid var(–gold);padding:9px 18px;text-align:center;font-size:.8rem;color:#8b4513;} .ns-usage.danger{background:#fff5f0;color:var(–accent);} .ns-wrap{max-width:820px;margin:0 auto;padding:24px 18px 70px;} .ns-notice{background:#fdf7ee;border:1px solid var(–gold);border-radius:8px;padding:11px 15px;font-size:.79rem;color:#8b4513;margin-bottom:16px;display:flex;gap:10px;align-items:flex-start;} .ns-mode{display:flex;border:1px solid var(–border);border-radius:8px;overflow:hidden;margin-bottom:16px;} .ns-mode-btn{flex:1;padding:11px;background:#f8f5f0;border:none;cursor:pointer;font-family:’Inter’,sans-serif;font-size:.86rem;font-weight:500;color:var(–muted);border-right:1px solid var(–border);transition:all .18s;} .ns-mode-btn:last-child{border-right:none;} .ns-mode-btn.active{background:var(–accent);color:#fff;font-weight:600;} .ns-card{background:var(–surface);border:1px solid var(–border);border-radius:10px;padding:22px;margin-bottom:14px;box-shadow:0 1px 6px rgba(0,0,0,.06);} .ns-lbl{font-size:.67rem;text-transform:uppercase;letter-spacing:.12em;color:var(–muted);margin-bottom:6px;display:block;font-weight:600;} .ns-fmt{display:flex;border:1px solid var(–border);border-radius:7px;overflow:hidden;margin-bottom:10px;flex-wrap:wrap;} .ns-fmt-btn{flex:1;min-width:70px;padding:8px 4px;background:#f8f5f0;border:none;cursor:pointer;font-family:’Inter’,sans-serif;font-size:.72rem;font-weight:500;color:var(–muted);border-right:1px solid var(–border);transition:all .18s;text-align:center;} .ns-fmt-btn:last-child{border-right:none;} .ns-fmt-btn.active{background:var(–accent);color:#fff;font-weight:600;} .ns-fmt-hint{font-size:.72rem;color:var(–muted);margin-bottom:9px;font-style:italic;min-height:16px;} .ns-ta{width:100%;min-height:100px;padding:12px;border:1px solid var(–border);border-radius:6px;font-family:’Inter’,sans-serif;font-size:.95rem;background:#fdfaf6;resize:vertical;color:var(–text);transition:border .2s;} .ns-ta:focus{outline:none;border-color:var(–accent);} .ns-upload{border:2px dashed var(–border);border-radius:8px;padding:28px 20px;text-align:center;cursor:pointer;background:#fdfaf6;position:relative;transition:border .2s,background .2s;} .ns-upload:hover,.ns-upload.over{border-color:var(–accent);background:#fff8f0;} .ns-upload input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%;} .ns-upload-icon{font-size:2rem;display:block;margin-bottom:7px;} .ns-upload p{color:var(–muted);font-size:.86rem;} .ns-upload .hint{font-size:.73rem;color:#b0916e;margin-top:3px;} #ns-preview{max-width:100%;max-height:190px;border-radius:6px;margin-top:12px;display:none;border:1px solid var(–border);} .ns-opts{display:flex;gap:12px;flex-wrap:wrap;margin-top:14px;} .ns-opts>div{flex:1;min-width:140px;} .ns-sel{width:100%;padding:9px 10px;border:1px solid var(–border);border-radius:6px;font-family:’Inter’,sans-serif;font-size:.86rem;background:#fdfaf6;color:var(–text);cursor:pointer;} .ns-sel:focus{outline:none;border-color:var(–accent);} .ns-btn{display:block;width:100%;padding:13px;background:linear-gradient(135deg,var(–accent),#8b1a1a);color:#fff;border:none;border-radius:8px;cursor:pointer;font-family:’Inter’,sans-serif;font-size:.95rem;font-weight:600;letter-spacing:.04em;transition:opacity .2s,transform .1s;margin-top:4px;} .ns-btn:hover{opacity:.9;transform:translateY(-1px);} .ns-btn:disabled{opacity:.45;cursor:not-allowed;transform:none;} .ns-spin-wrap{display:none;text-align:center;padding:28px;color:var(–muted);font-style:italic;} .ns-spin-wrap.show{display:block;} .ns-spinner{display:inline-block;width:26px;height:26px;border:3px solid var(–border);border-top-color:var(–accent);border-radius:50%;animation:nsspin .75s linear infinite;margin-bottom:8px;} @keyframes nsspin{to{transform:rotate(360deg);}} .ns-err{background:#fff5f5;border:1px solid #f5c0c0;border-radius:8px;padding:13px;color:#8b1a1a;font-size:.88rem;margin-top:12px;display:none;} .ns-err.show{display:block;} .ns-panel{display:none;}.ns-panel.active{display:block;} #ns-result{display:none;} #ns-result.show{display:block;} .ns-divider{text-align:center;color:var(–gold);margin:8px 0 4px;font-size:1rem;letter-spacing:.3em;} /* Result cards */ .ns-res-card{background:var(–surface);border:1px solid var(–border);border-radius:10px;padding:22px;margin-bottom:14px;box-shadow:0 1px 6px rgba(0,0,0,.06);} .ns-res-card h2{font-size:.67rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(–accent);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(–border);display:flex;justify-content:space-between;align-items:center;} .ns-copy{background:none;border:1px solid var(–border);border-radius:4px;padding:3px 9px;font-size:.67rem;font-family:’Inter’,sans-serif;color:var(–muted);cursor:pointer;transition:all .18s;white-space:nowrap;} .ns-copy:hover{border-color:var(–accent);color:var(–accent);} /* Bhava-specific result styles */ .ns-orig{font-size:1.2rem;line-height:2;padding:13px;background:#fdfaf6;border-radius:6px;border-left:3px solid var(–border);} .ns-trans{font-size:.94rem;line-height:1.8;padding:13px;background:#fdf7ee;border-radius:6px;border-left:3px solid var(–gold);} /* Primary bhava badge */ .ns-bhava-badge{display:inline-flex;align-items:center;gap:10px;background:var(–header);color:var(–gold);padding:8px 18px;border-radius:24px;font-size:.88rem;font-weight:700;letter-spacing:.06em;margin-bottom:10px;} .ns-bhava-badge .emoji{font-size:1.3rem;} .ns-bhava-rasa{font-size:.82rem;color:#a0a0b8;font-weight:400;letter-spacing:.04em;} /* Rasa colour tags */ .ns-rasa-grid{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px;} .ns-rasa-pill{display:inline-flex;align-items:center;gap:6px;padding:5px 14px;border-radius:20px;font-size:.78rem;font-weight:600;letter-spacing:.04em;} .rasa-shringara{background:#fde8f0;color:#8b1a4a;} .rasa-hasya{background:#fef9e0;color:#7a6000;} .rasa-karuna{background:#e8f0fd;color:#1a3a8b;} .rasa-raudra{background:#fde8e0;color:#8b2a1a;} .rasa-vira{background:#e8fde8;color:#1a6b1a;} .rasa-bhayanaka{background:#ede8fd;color:#3a1a8b;} .rasa-bibhatsa{background:#f0f0e8;color:#4a4a20;} .rasa-adbhuta{background:#e0fdf9;color:#006b5a;} .rasa-shanta{background:#fdf5e0;color:#6b4e00;} /* Character / speaker section */ .ns-character{background:var(–teal-light);border:1px solid #9dd0c5;border-radius:8px;padding:14px 16px;font-size:.88rem;line-height:1.7;} .ns-character strong{color:var(–teal);display:block;font-size:.67rem;text-transform:uppercase;letter-spacing:.1em;margin-bottom:4px;} /* Choreography cues */ .ns-cue-list{list-style:none;padding:0;} .ns-cue-list li{display:flex;gap:12px;align-items:flex-start;padding:9px 0;border-bottom:1px solid #f0ece4;font-size:.87rem;line-height:1.6;} .ns-cue-list li:last-child{border-bottom:none;} .ns-cue-list li::before{content:”›”;color:var(–accent);font-weight:700;font-size:1.1rem;flex-shrink:0;margin-top:1px;} /* Abhinaya section */ .ns-abhinaya-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;} .ns-abhinaya-card{background:#fdfaf6;border:1px solid var(–border);border-radius:8px;padding:12px 14px;font-size:.83rem;line-height:1.6;} .ns-abhinaya-card .ab-type{font-size:.63rem;text-transform:uppercase;letter-spacing:.1em;color:var(–accent);font-weight:600;margin-bottom:4px;} .ns-abhinaya-card .ab-detail{color:var(–text);} /* Summary */ .ns-summary{line-height:1.85;font-size:.92rem;} /* Sanchari storyline */ .ns-sanchari{background:linear-gradient(135deg,#fdfaf6,#f5f0e8);border:1px solid var(–gold);border-radius:8px;padding:16px 18px;font-size:.9rem;line-height:1.85;} .ns-sanchari-arc{display:flex;flex-direction:column;gap:10px;margin-top:12px;} .ns-sanchari-beat{display:flex;gap:12px;align-items:flex-start;font-size:.86rem;line-height:1.65;} .ns-beat-dot{min-width:10px;height:10px;border-radius:50%;background:var(–gold);margin-top:5px;flex-shrink:0;} .ns-beat-dot.peak{background:var(–accent);width:12px;height:12px;margin-top:4px;} .ns-sanchari-connector{width:1px;height:14px;background:var(–border);margin-left:4px;} /* References */ .ns-ref-list{list-style:none;padding:0;display:flex;flex-direction:column;gap:6px;} .ns-ref-list li{display:flex;gap:10px;align-items:flex-start;font-size:.84rem;line-height:1.6;padding:8px 10px;background:#fdfaf6;border:1px solid var(–border);border-radius:6px;} .ns-ref-list li::before{content:”📖”;flex-shrink:0;font-size:.9rem;margin-top:1px;} .ns-ref-list a{color:var(–accent);text-decoration:none;font-weight:500;} .ns-ref-list a:hover{text-decoration:underline;} .ns-ref-list .ref-note{display:block;font-size:.74rem;color:var(–muted);margin-top:2px;} /* Internal tools */ .ns-tools-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-top:4px;} .ns-tool-link{display:flex;align-items:center;gap:8px;padding:9px 12px;background:#fdfaf6;border:1px solid var(–border);border-radius:7px;text-decoration:none;color:var(–text);font-size:.82rem;font-weight:500;transition:all .18s;} .ns-tool-link:hover{border-color:var(–accent);background:#fff8f0;color:var(–accent);} .ns-tool-link .tl-icon{font-size:1.1rem;flex-shrink:0;} /* Intensity bar */ .ns-intensity{display:flex;align-items:center;gap:10px;margin-top:8px;} .ns-intensity-label{font-size:.72rem;color:var(–muted);min-width:90px;} .ns-intensity-bar{flex:1;height:6px;background:#f0ece4;border-radius:3px;overflow:hidden;} .ns-intensity-fill{height:100%;background:linear-gradient(90deg,var(–gold),var(–accent));border-radius:3px;transition:width .6s ease;} /* Intro / howto / features */ .ns-intro{background:var(–surface);border:1px solid var(–border);border-radius:10px;padding:26px;margin-bottom:14px;box-shadow:0 1px 6px rgba(0,0,0,.06);} .ns-intro-title{font-size:1.25rem;font-weight:700;color:var(–header);margin-bottom:12px;line-height:1.3;} .ns-intro-body{font-size:.92rem;line-height:1.8;color:var(–text);margin-bottom:10px;} .ns-intro-body:last-child{margin-bottom:0;} .ns-howto{background:var(–surface);border:1px solid var(–border);border-radius:10px;padding:26px;margin-bottom:14px;box-shadow:0 1px 6px rgba(0,0,0,.06);} .ns-howto-title{font-size:.95rem;font-weight:700;color:var(–header);margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid var(–border);text-transform:uppercase;letter-spacing:.08em;} .ns-steps{display:flex;flex-direction:column;gap:14px;} .ns-step{display:flex;gap:14px;align-items:flex-start;font-size:.88rem;line-height:1.65;color:var(–text);} .ns-step-num{min-width:28px;height:28px;background:var(–accent);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700;flex-shrink:0;margin-top:1px;} .ns-features-block{background:var(–surface);border:1px solid var(–border);border-radius:10px;padding:26px;margin-bottom:14px;box-shadow:0 1px 6px rgba(0,0,0,.06);} .ns-feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;} .ns-feature-item{display:flex;gap:10px;align-items:flex-start;background:#fdfaf6;border:1px solid var(–border);border-radius:8px;padding:12px;font-size:.84rem;line-height:1.55;color:var(–text);} .ns-feature-item span{font-size:1.3rem;flex-shrink:0;} .ns-disclaimer{background:#fffaf3;border:1px solid var(–gold);border-radius:10px;padding:20px 22px;margin-bottom:14px;font-size:.82rem;line-height:1.75;color:#5a3e00;display:flex;gap:12px;align-items:flex-start;} .ns-disclaimer-icon{font-size:1.3rem;flex-shrink:0;margin-top:2px;} /* Gate modal */ #ns-gate{display:none;position:fixed;inset:0;background:rgba(20,10,0,.82);z-index:9999;align-items:center;justify-content:center;padding:18px;} #ns-gate.show{display:flex;} .ns-gate-card{background:#fffaf3;border-radius:16px;padding:36px 30px;max-width:460px;width:100%;text-align:center;box-shadow:0 24px 64px rgba(0,0,0,.45);border:2px solid var(–gold);} .ns-gate-step{display:none;}.ns-gate-step.active{display:block;} .ns-gate-card h2{color:var(–header);font-size:1.2rem;font-weight:700;margin-bottom:8px;} .ns-gate-card p{color:var(–muted);font-size:.87rem;line-height:1.65;margin-bottom:18px;} .ns-email-input{width:100%;padding:11px 14px;border:1px solid var(–border);border-radius:7px;font-family:’Inter’,sans-serif;font-size:.93rem;background:#fdfaf6;color:var(–text);margin-bottom:10px;} .ns-email-input:focus{outline:none;border-color:var(–accent);} .ns-gate-btn{width:100%;padding:12px;border:none;border-radius:8px;cursor:pointer;font-family:’Inter’,sans-serif;font-size:.93rem;font-weight:600;transition:opacity .2s;margin-top:6px;} .ns-gate-btn.primary{background:linear-gradient(135deg,var(–accent),#8b1a1a);color:#fff;} .ns-gate-btn.dark{background:var(–header);color:var(–gold);} .ns-gate-btn.ghost{background:none;border:1px solid var(–border);color:var(–muted);font-size:.82rem;} .ns-gate-btn:hover{opacity:.88;} .ns-earlybird{background:linear-gradient(135deg,#1c1c2e,#2e1a00);border-radius:10px;padding:18px;margin:14px 0;color:#fff;} .ns-price-old{text-decoration:line-through;color:#a0a0b8;font-size:.88rem;} .ns-price-new{color:var(–gold);font-size:1.8rem;font-weight:700;} .ns-price-note{font-size:.75rem;color:#c8a87a;margin-top:3px;} .ns-features{text-align:left;margin:14px 0;padding:0;} .ns-features li{list-style:none;padding:4px 0;font-size:.84rem;color:var(–text);} .ns-features li::before{content:”✓ “;color:#2d6a4f;font-weight:700;} .ns-badge{display:inline-block;background:#c0392b;color:#fff;font-size:.7rem;font-weight:600;padding:3px 10px;border-radius:20px;margin-bottom:12px;} .ns-secure{font-size:.7rem;color:#b0916e;margin-top:10px;} @media(max-width:540px){ .ns-opts>div{min-width:100%;} .ns-fmt-btn{font-size:.68rem;padding:7px 3px;} .ns-gate-card{padding:26px 18px;} .ns-abhinaya-grid{grid-template-columns:1fr 1fr;} }
Bhava Analyserby Natya-Shastra.in

Rasa · Bhava · Abhinaya cues · Choreography guidance · 7 Indian scripts

Loading…

Understand the emotional heart of any verse

The Bhava Analyser is a free beta tool by Natya-Shastra.in designed for dancers, choreographers, directors, and students of classical Indian performance. It decodes the emotional and expressive essence of any shloka, poem, song lyric, or literary passage from Sanskrit, Tamil, Telugu, Kannada, Pali, Sinhalese, and Devanagari sources.

Paste a verse or upload a manuscript image. The tool identifies the primary bhava, the nine rasas present, the character’s emotional state, and gives you concrete abhinaya and choreography cues, so performers and directors know exactly what needs to be felt and expressed on stage.

How to use

1
Choose your input – paste or type the verse directly, or upload a photo of a manuscript, book page, or handwritten text.
2
Select the source language – Sanskrit, Tamil, Telugu, Kannada, Pali, Sinhalese, or auto-detect. This helps the tool parse the text accurately.
3
Choose your perspective – analyse bhava from the poet’s viewpoint (the intention behind the verse) or the character’s viewpoint (who is speaking inside the narrative).
4
Select output language – receive the full analysis in English, Hindi, Tamil, Kannada, Telugu, or Malayalam.
5
Click Analyse Bhava – the tool returns the primary bhava, all rasas, character emotion, choreography cues, abhinaya suggestions, and a full performance commentary.

What the tool gives you

🎭
Primary bhava – the dominant emotional state and its Natyashastra classification
🌊
Rasa mapping – all nine rasas identified with intensity levels
👤
Character’s inner state – what the speaker or subject is feeling
💃
Choreography cues – movement, rhythm, stage placement guidance
🤲
Abhinaya guidance – angika, vachika, aharya, sattvika suggestions
📜
Image OCR – extract and analyse bhava from manuscript photos
⚠️
Beta disclaimer
This tool is in public beta and is a scholarly aid, not a definitive performance manual. Outputs are AI-generated and may not capture every nuance of a verse’s interpretation, particularly for rare texts or regional variants. Cross-reference with your guru, choreographer, or authoritative commentary before performance use.

Natya-Shastra.in is not responsible for performance decisions based on this tool’s output. Questions or corrections? Write to natyashastra7@gmail.com
🎭
Free beta – 5 analyses per session. Accepts Sanskrit, Tamil, Telugu, Kannada, Pali, Sinhalese, Devanagari and manuscript images.
Script / format
Type or paste in Devanagari script directly.
Upload manuscript, book page, or handwritten verse
📜

Click to browse, or drag and drop here

JPG, PNG, WEBP · Max 5 MB

Preview
Source language Auto-detect Sanskrit Tamil Telugu Kannada Pali Sinhalese
Perspective Poet’s perspective Character’s perspective Both
Output language English Hindi Tamil Kannada Telugu Malayalam

Reading the bhava… this may take a few seconds.

· ❧ ·

Original verse

Primary bhava

🎭
Intensity

Rasa present in this verse

Character’s inner state

Choreography cues for performers

    Abhinaya guidance

    Performance commentary

    Sanchari — suggested storyline for the dancer

    Explore related tools on Natya-Shastra.in

    Further reading & references

    • Natyashastra — Bharata MuniThe foundational treatise on rasa, bhava, abhinaya and all aspects of classical performance.Read on Archive.org ↗
    • Abhinayadarpana — Nandikeshwara (tr. Dr. Manmohan Ghosh)The mirror of gesture — essential reading on hasta mudras and their expressive meanings.Read on Archive.org ↗
    • Bharatarnava — NandikeshwaraAn extensive treatise on dance, covering karanas, movements, and performance theory.Read on Archive.org ↗
    • Traditional Indian Theatre — Kapila VatsyayanA comprehensive survey of India’s multiple theatrical streams and their expressive traditions.Read on Archive.org ↗
    • Non-Verbal Communication in Bharatanatyam GesturesAcademic study on the symbolic meanings embedded in gesture vocabulary.Download paper ↗
    • Hasta Lakshana DeepikaClassical text detailing the classification and usage of hand gestures in dance.
    • Sanskrit DocumentsA vast digital repository of Sanskrit texts, useful for tracing source verses.Visit ↗
    • Natya-Shastra.in ReferencesOur full curated reading list for students and practitioners of classical Indian arts.View all ↗
    🎭

    You’ve used all 5 free analyses

    Leave your email and we’ll notify you the moment the full version launches — with an exclusive early-bird offer just for beta users.

    🔒 No spam. One email when we launch. That’s it.

    Thank you! You’re on the list 🎉

    As a beta tester, you get exclusive early-bird pricing when we launch:

    Regular price ₹199/month
    ₹99/month
    50% off · First 3 months · Beta testers only
    ⚡ Limited to first 50 subscribers
    • Unlimited bhava analyses
    • Image upload & manuscript OCR
    • Full abhinaya & choreography cues
    • 6 output languages
    • All 9 rasas mapped with intensity
    • Priority support

    We’ll email when it’s ready.

    Built with ❤️ by Natya-Shastra.in
    // ── Config ────────────────────────────────────────────────────────────────── var NS_PROXY = ‘https://shloka-proxy.onrender.com/bhava-proxy.php&#8217;; var NS_LIMIT = 5; var NS_LOGO = ‘PASTE_YOUR_LOGO_URL_HERE’; // ──────────────────────────────────────────────────────────────────────────── var nsFmt = ‘devanagari’; var nsMode = ‘text’; var nsImgB64 = null; var nsImgMime = null; var NS_TOOLS_MAP = {}; var NS_HINTS = { devanagari: ‘Type or paste in Devanagari script directly.’, tamil: ‘Paste in Tamil script.’, telugu: ‘Paste in Telugu script.’, kannada: ‘Paste in Kannada script.’, pali: ‘Paste in Pali (Devanagari or Roman) or Sinhalese script.’, iast: ‘IAST with diacritics, or plain Roman transliteration.’ }; var RASA_META = { shringara: { label:’Śṛṅgāra (Love)’, cls:’rasa-shringara’, emoji:’💕’ }, hasya: { label:’Hāsya (Joy)’, cls:’rasa-hasya’, emoji:’😄’ }, karuna: { label:’Kāruṇa (Sorrow)’, cls:’rasa-karuna’, emoji:’💧’ }, raudra: { label:’Raudra (Fury)’, cls:’rasa-raudra’, emoji:’🔥’ }, vira: { label:’Vīra (Heroism)’, cls:’rasa-vira’, emoji:’⚔️’ }, bhayanaka: { label:’Bhayānaka (Terror)’, cls:’rasa-bhayanaka’, emoji:’😱’ }, bibhatsa: { label:’Bībhatsa (Disgust)’, cls:’rasa-bibhatsa’, emoji:’🌑’ }, adbhuta: { label:’Adbhuta (Wonder)’, cls:’rasa-adbhuta’, emoji:’✨’ }, shanta: { label:’Śānta (Peace)’, cls:’rasa-shanta’, emoji:’🕊️’ } }; // ── Init ──────────────────────────────────────────────────────────────────── document.addEventListener(‘DOMContentLoaded’, function() { var logo = document.getElementById(‘ns-logo’); if (NS_LOGO && NS_LOGO !== ‘PASTE_YOUR_LOGO_URL_HERE’) { logo.src = NS_LOGO; } else { logo.style.display = ‘none’; } nsUpdateBar(); }); // ── Session helpers ───────────────────────────────────────────────────────── function nsGetUsed() { return parseInt(localStorage.getItem(‘bv_used’) || ‘0’, 10); } function nsIncUsed() { localStorage.setItem(‘bv_used’, nsGetUsed() + 1); } function nsEmailSaved() { return !!localStorage.getItem(‘bv_email’); } function nsGetUID() { var u = localStorage.getItem(‘bv_uid’); if (!u) { u = ‘u’ + Date.now().toString(36) + Math.random().toString(36).slice(2, 8); localStorage.setItem(‘bv_uid’, u); } return u; } function nsUpdateBar() { var bar = document.getElementById(‘ns-usage’); var used = nsGetUsed(); var left = Math.max(0, NS_LIMIT – used); if (nsEmailSaved()) { bar.textContent = ‘📋 You\’re on the early-bird waitlist. Full access coming soon!’; bar.className = ‘ns-usage’; } else if (left === 0) { bar.textContent = ‘⚠️ You\’ve used all 5 free analyses. Join the waitlist for the paid launch.’; bar.className = ‘ns-usage danger’; } else { var dots = ‘●’.repeat(used) + ‘○’.repeat(left); bar.textContent = ‘Free analyses: ‘ + dots + ‘ (‘ + left + ‘ of ‘ + NS_LIMIT + ‘ remaining)’; bar.className = left 5 * 1024 * 1024) { nsShowErr(‘Image too large. Max 5 MB.’); return; } nsImgMime = file.type; var rd = new FileReader(); rd.onload = function(ev) { nsImgB64 = ev.target.result.split(‘,’)[1]; var img = document.getElementById(‘ns-preview’); img.src = ev.target.result; img.style.display = ‘block’; }; rd.readAsDataURL(file); } var nsDZ = document.getElementById(‘ns-dropzone’); if (nsDZ) { nsDZ.addEventListener(‘dragover’, function(e){ e.preventDefault(); nsDZ.classList.add(‘over’); }); nsDZ.addEventListener(‘dragleave’, function(){ nsDZ.classList.remove(‘over’); }); nsDZ.addEventListener(‘drop’, function(e){ e.preventDefault(); nsDZ.classList.remove(‘over’); var f = e.dataTransfer.files[0]; if (f) { document.getElementById(‘ns-file’).files = e.dataTransfer.files; nsHandleImg({target:{files:[f]}}); } }); } // ── Analyze ─────────────────────────────────────────────────────────────────── function nsTryAnalyze() { if (nsGetUsed() >= NS_LIMIT && !nsEmailSaved()) { nsOpenGate(); return; } nsAnalyze(); } function nsAnalyze() { nsHideErr(); document.getElementById(‘ns-result’).classList.remove(‘show’); var lang = document.getElementById(‘ns-lang’).value; var src = document.getElementById(‘ns-src’).value; var perspective = document.getElementById(‘ns-perspective’).value; var system = ‘You are a master of Natyashastra, classical Indian poetics, rasa theory, and the practice of abhinaya across Bharatanatyam, Odissi, Kathakali, Kuchipudi, and other classical dance traditions. You have deep knowledge of Sanskrit, Tamil, Telugu, Kannada, Pali, and Sinhalese literature. You decode the bhava (emotional essence) of any verse with insight drawn from Bharata Muni\’s Natyashastra, Abhinavagupta\’s Abhinavabharati, and Dhananjaya\’s Dasharupaka. Respond ONLY with a valid JSON object — no markdown, no preamble, no extra text.’; var messages; if (nsMode === ‘text’) { var txt = document.getElementById(‘ns-shloka’).value.trim(); if (!txt) { nsShowErr(‘Please enter a verse or passage first.’); return; } messages = [{ role: ‘user’, content: nsTextPrompt(txt, nsFmt, src, lang, perspective) }]; } else { if (!nsImgB64) { nsShowErr(‘Please upload an image first.’); return; } messages = [{ role: ‘user’, content: [ { type: ‘image’, source: { type: ‘base64’, media_type: nsImgMime, data: nsImgB64 }}, { type: ‘text’, text: nsImgPrompt(src, lang, perspective) } ]}]; } nsSetLoad(true); fetch(NS_PROXY, { method: ‘POST’, headers: { ‘Content-Type’: ‘application/json’ }, body: JSON.stringify({ action: ‘analyze’, uid: nsGetUID(), system: system, messages: messages }) }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.error) throw new Error(data.error); var raw = (data.content || []).map(function(c){ return c.text || ”; }).join(”); var s = raw.indexOf(‘{‘); var e = -1; var d = 0; for (var i = s; i < raw.length; i++) { if (raw[i] === '{') d++; else if (raw[i] === '}') { d–; if (!d) { e = i; break; } } } if (s < 0 || e = NS_LIMIT && !nsEmailSaved()) { setTimeout(nsOpenGate, 1800); } }) .catch(function(err) { nsShowErr(‘Analysis failed: ‘ + err.message); }) .finally(function() { nsSetLoad(false); }); } // ── Prompts ─────────────────────────────────────────────────────────────────── function nsTextPrompt(verse, fmt, src, lang, perspective) { var fmtNote = { devanagari: ‘Devanagari script.’, tamil: ‘Tamil script.’, telugu: ‘Telugu script.’, kannada: ‘Kannada script.’, pali: ‘Pali or Sinhalese script.’, iast: ‘IAST or Roman transliteration.’ }[fmt] || ‘auto-detect script.’; return ‘Analyse the bhava of this verse:\n”‘ + verse + ‘”\n\nScript: ‘ + fmtNote + ‘\nSource language: ‘ + src + ‘\nPerspective: ‘ + perspective + ‘\nOutput language: ‘ + lang + ‘\n\n’ + nsSchema(lang); } function nsImgPrompt(src, lang, perspective) { return ‘Extract the text from this image and analyse its bhava.\nSource language: ‘ + src + ‘\nPerspective: ‘ + perspective + ‘\nOutput language: ‘ + lang + ‘\n\n’ + nsSchema(lang); } function nsSchema(lang) { var tools = [ { key:’shloka’, label:’Shloka Analyzer’, url:’https://natya-shastra.in/shloka-analyzer/&#8217;, icon:’📜’ }, { key:’karana’, label:’Karana Identifier’, url:’https://natya-shastra.in/karana-identifier/&#8217;, icon:’🕺’ }, { key:’rasa’, label:’Rasa & Bhava Explorer’, url:’https://natya-shastra.in/rasa-bhava-explorer/&#8217;, icon:’🌊’ }, { key:’gati’, label:’Gati Explorer’, url:’https://natya-shastra.in/gati-gait-explorer/&#8217;, icon:’🚶’ }, { key:’sanskrit’, label:’Sanskrit Composer’, url:’https://natya-shastra.in/sanskrit-verse-composer/&#8217;, icon:’✍️’ }, { key:’detector’, label:’Rasa Detector’, url:’https://natya-shastra.in/rasa-detector/&#8217;, icon:’🔍’ } ]; NS_TOOLS_MAP = {}; tools.forEach(function(t){ NS_TOOLS_MAP[t.key] = t; }); return ‘Return ONLY a JSON object with this exact structure (all text fields in ‘ + lang + ‘ except keys, tool keys, and rasa names):\n{\n “original”: “the verse in its original script”,\n “primary_bhava”: {\n “name”: “bhava name in ‘ + lang + ‘”,\n “sanskrit_name”: “Sanskrit/technical name”,\n “rasa”: “associated rasa”,\n “emoji”: “single relevant emoji”,\n “description”: “2-3 sentences describing this bhava in context”,\n “intensity”: 85\n },\n “rasas”: [\n { “key”: “shringara”, “label”: “rasa name”, “intensity”: 90, “note”: “brief note in ‘ + lang + ‘” }\n ],\n “character_state”: {\n “speaker”: “who is speaking or being described”,\n “emotion”: “their inner emotional state in ‘ + lang + ‘”,\n “context”: “2 sentences on the narrative situation”\n },\n “choreography_cues”: [\n “specific cue for performers in ‘ + lang + ‘”\n ],\n “abhinaya”: [\n { “type”: “Angika”, “detail”: “body/gesture guidance in ‘ + lang + ‘” },\n { “type”: “Vachika”, “detail”: “vocal/rhythm guidance in ‘ + lang + ‘” },\n { “type”: “Aharya”, “detail”: “costume/makeup guidance in ‘ + lang + ‘” },\n { “type”: “Sattvika”, “detail”: “inner feeling guidance in ‘ + lang + ‘” }\n ],\n “rasa_note”: “1 sentence on dominant rasa interplay in ‘ + lang + ‘”,\n “commentary”: “4-6 sentences of performance commentary in ‘ + lang + ‘”,\n “sanchari”: {\n “scene”: “1-2 sentences setting the opening imaginary scene a dancer can inhabit — a specific place, time, and situation rooted in the verse\’s emotional world”,\n “beats”: [\n { “type”: “opening”, “text”: “How the dancer enters the emotional space — the initial situation or trigger in ‘ + lang + ‘” },\n { “type”: “peak”, “text”: “The emotional climax — the peak moment of the bhava the performer must fully inhabit in ‘ + lang + ‘” },\n { “type”: “resolve”, “text”: “How the bhava lands or transforms — the closing inner state the dancer leaves the audience with in ‘ + lang + ‘” }\n ]\n },\n “related_tools”: [“shloka”,”rasa”]\n}’; } // ── Render ───────────────────────────────────────────────────────────────────── function nsRender(d, lang, perspective) { // Original document.getElementById(‘ns-orig-block’).innerHTML = (d.original || ‘—’).replace(/\n/g, ‘
    ‘); // Primary bhava var pb = d.primary_bhava || {}; document.getElementById(‘ns-bhava-emoji’).textContent = pb.emoji || ‘🎭’; document.getElementById(‘ns-bhava-name’).textContent = pb.name || ‘—’; document.getElementById(‘ns-bhava-rasa’).textContent = pb.sanskrit_name ? pb.sanskrit_name + ‘ · ‘ + (pb.rasa || ”) : (pb.rasa || ”); document.getElementById(‘ns-bhava-desc’).innerHTML = (pb.description || ”).replace(/\n/g, ‘
    ‘); var pct = Math.min(100, Math.max(0, parseInt(pb.intensity) || 70)); document.getElementById(‘ns-intensity-fill’).style.width = pct + ‘%’; document.getElementById(‘ns-intensity-pct’).textContent = pct + ‘%’; // Rasas var rasaGrid = document.getElementById(‘ns-rasa-grid’); rasaGrid.innerHTML = ”; (d.rasas || []).forEach(function(r) { var meta = RASA_META[r.key] || { label: r.label || r.key, cls: ‘rasa-shanta’, emoji: ‘✦’ }; var pill = document.createElement(‘div’); pill.className = ‘ns-rasa-pill ‘ + meta.cls; pill.title = r.note || ”; pill.innerHTML = meta.emoji + ‘ ‘ + meta.label + (r.intensity ? ‘ (‘ + r.intensity + ‘%)‘ : ”); rasaGrid.appendChild(pill); }); document.getElementById(‘ns-rasa-note’).textContent = d.rasa_note || ”; // Character state var cs = d.character_state || {}; var perspLabel = { poet: ‘Poet\’s perspective’, character: ‘Character\’s perspective’, both: ‘Both perspectives’ }[perspective] || ”; document.getElementById(‘ns-perspective-tag’).textContent = perspLabel ? ‘(‘ + perspLabel + ‘)’ : ”; var charBlock = document.getElementById(‘ns-char-block’); charBlock.innerHTML = ”; if (cs.speaker) { charBlock.innerHTML += ‘Speaker / Subject‘ + nsEsc(cs.speaker); } if (cs.emotion) { charBlock.innerHTML += ‘Emotional state‘ + nsEsc(cs.emotion); } if (cs.context) { charBlock.innerHTML += ‘Narrative context‘ + nsEsc(cs.context); } if (!cs.speaker && !cs.emotion) { charBlock.innerHTML = ‘Not applicable for this verse.‘; } // Choreography cues var cueList = document.getElementById(‘ns-cues’); cueList.innerHTML = ”; (d.choreography_cues || []).forEach(function(cue) { var li = document.createElement(‘li’); li.textContent = cue; cueList.appendChild(li); }); // Abhinaya var abGrid = document.getElementById(‘ns-abhinaya-grid’); abGrid.innerHTML = ”; (d.abhinaya || []).forEach(function(ab) { var card = document.createElement(‘div’); card.className = ‘ns-abhinaya-card’; card.innerHTML = ‘
    ‘ + nsEsc(ab.type) + ‘
    ‘ + nsEsc(ab.detail) + ‘
    ‘; abGrid.appendChild(card); }); // Commentary document.getElementById(‘ns-summary’).innerHTML = (d.commentary || ”).replace(/\n/g, ‘
    ‘); // Sanchari storyline var sc = d.sanchari || {}; document.getElementById(‘ns-sanchari-scene’).innerHTML = nsEsc(sc.scene || ”); var arcEl = document.getElementById(‘ns-sanchari-arc’); arcEl.innerHTML = ”; var beatLabels = { opening: ‘Opening situation’, peak: ‘Emotional peak’, resolve: ‘Resolution’ }; (sc.beats || []).forEach(function(beat, i) { if (i > 0) { var conn = document.createElement(‘div’); conn.className = ‘ns-sanchari-connector’; arcEl.appendChild(conn); } var row = document.createElement(‘div’); row.className = ‘ns-sanchari-beat’; var dot = document.createElement(‘div’); dot.className = ‘ns-beat-dot’ + (beat.type === ‘peak’ ? ‘ peak’ : ”); var txt = document.createElement(‘div’); txt.innerHTML = ‘‘ + (beatLabels[beat.type] || beat.type) + ‘‘ + nsEsc(beat.text || ”); row.appendChild(dot); row.appendChild(txt); arcEl.appendChild(row); }); // Related internal tools var toolsGrid = document.getElementById(‘ns-related-tools’); toolsGrid.innerHTML = ”; var relatedKeys = d.related_tools || []; // Always show at least 3 tools; fall back to defaults if model returns few if (relatedKeys.length < 2) relatedKeys = ['shloka','rasa','karana']; relatedKeys.forEach(function(key) { var t = NS_TOOLS_MAP[key]; if (!t) return; var a = document.createElement('a'); a.className = 'ns-tool-link'; a.href = t.url; a.target = '_blank'; a.rel = 'noopener'; a.innerHTML = '‘ + t.icon + ‘‘ + t.label; toolsGrid.appendChild(a); }); var r = document.getElementById(‘ns-result’); r.classList.add(‘show’); r.scrollIntoView({ behavior: ‘smooth’, block: ‘start’ }); } // ── Helpers ─────────────────────────────────────────────────────────────────── function nsEsc(s) { return String(s || ”).replace(/&/g,’&’).replace(//g,’>’); } function nsCopy(id, btn) { navigator.clipboard.writeText(document.getElementById(id).innerText).then(function() { var orig = btn.textContent; btn.textContent = ‘Copied!’; setTimeout(function(){ btn.textContent = orig; }, 1800); }); } function nsShowErr(m) { var e = document.getElementById(‘ns-err’); e.textContent = m; e.classList.add(‘show’); } function nsHideErr() { document.getElementById(‘ns-err’).classList.remove(‘show’); } function nsSetLoad(v) { document.getElementById(‘ns-loading’).classList.toggle(‘show’, v); document.getElementById(‘ns-go’).disabled = v; }

    Bhava analyzer

    You’ve trained for years, you know the steps, but something in your expression isn’t landing. The ‘bhava’ isn’t coming through. That gap between technical skill and emotional truth is exactly what this tool is built to help with.


    What is bhava?

    Bhava refers to the emotion within the performer that gives rise to Rasa, the emotional essence experienced by the audience. Natya-shastra. It’s the inner state that makes a performance feel alive rather than mechanical.

    What the bhava analyzer does

    The Bhava Analyser is a free beta tool by Natya-Shastra.in designed for dancers, choreographers, directors, and students of classical Indian performance. It decodes the emotional and expressive essence of any shloka, poem, song lyric, or literary passage from Sanskrit, Tamil, Telugu, Kannada, Pali, Sinhalese, and Devanagari sources.

    Paste a verse or upload a manuscript image. The tool identifies the primary bhava, the nine rasas present, the character’s emotional state, and gives you concrete abhinaya and choreography cues, so performers and directors know exactly what needs to be felt and expressed on stage.


    Who is this for?

    Students learning Bharatanatyam, Odissi, Kuchipudi, Kathak, or any classical form. Use it to understand what your teachers mean when they say the emotion isn’t there yet.

    Teachers and gurus, use it as a teaching aid to articulate feedback more precisely and help students understand the gap between movement and meaning.

    Scholars and researchers, explore how the Natya Shastra’s emotional taxonomy maps onto real performances.

    Dance lovers and rasikas, the ability to recognise and receive rasa requires a sensitive, cultivated viewer. This tool helps you understand the bhava of any shloka.



    About Natya-Shastra.in

    At Natya-Shastra.in, our mission is to serve as a gateway to the illustrious world of the Natyashastra. We offer insights, resources, and a platform to delve deeper into the nuances of Indian performing arts.

    Also, we aim to bring forth the richness of this ancient text. We try to shed light on the profound wisdom it holds and its everlasting influence on various artistic traditions.


    We are here, follow us.


    Disclaimer: 

    Affiliate Links: Some links earn us a commission (at no cost to you). We only recommend helpful products.

    NatyaShastra Glossary: Head over to the Natyashastra Glossary page to know the meaning behind Sanskrit terms used in the articles.

    Images & Videos: Representational only, not exact depictions.

    Knowledge Source & References: Inspired by ancient Natyashastra scriptures, open to interpretation.

    Experience rasa through sound, speech, and silence

    Download your free ebook

    We don’t spam! Read our privacy policy for more info.