{"_id":"tavi-video-tutor","_rev":"77-fa12d8afda49ce8b5de41f2481aac06b","name":"tavi-video-tutor","dist-tags":{"latest":"2.2.1"},"versions":{"0.2.5":{"name":"tavi-video-tutor","version":"0.2.5","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.2.5","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"680f3e0277ac60879561ff10dcb84f287db7b038","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.2.5.tgz","fileCount":9,"integrity":"sha512-3dT7899tDGcRxdWIK3jyr7tMTc2zQEnbp8jP/ezL5EnDVAgNYsBv0BS2TEpK8p5IwxR8iZlxUKNzXwx2xHggyw==","signatures":[{"sig":"MEUCIQC7qBBoYUJ016cT3fGpIh4d6ayriG26kdyYpkI1yp+GhQIgO9cNwz6Pa+F1xI0GvYLKazM9H8nFCpnfesvPhEGzQn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1804459},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"f9ffd421b92e4f4441e511d913bb80013bb1c1ff","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.2.5_1782061748319_0.30021160586169215","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"tavi-video-tutor","version":"0.2.6","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.2.6","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"2456cd6d918ea0c29e9e758d3505d1807a739255","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.2.6.tgz","fileCount":14,"integrity":"sha512-QlqwnqyLkZHHEmgbGa7E55MmJQPc7/JVLoBQpShSWfGHWExjRczwQIxKAnbMybnzWOZnQFQY7gsS8O9Rxg+MfQ==","signatures":[{"sig":"MEQCIDLQg5qybkfWoPK8kGpQvqMESBkRIrQg/eq4gO6Sx6ZjAiBrA6TII/XritWR6bPJOIN2m5X3zuI/VtlLlfBpf+UXjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2020765},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"f840236a7a7849818fe19d451c804d67a6c17211","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.2.6_1782207528367_0.28497025192493064","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"tavi-video-tutor","version":"0.2.7","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.2.7","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"8f636625277772dfed82f3eb68e511ca438d40b9","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.2.7.tgz","fileCount":14,"integrity":"sha512-61259g8/VeaarMKnXwC4fiOG2Gl5iu53qKIwQV2HtsxiBqWYYdxQcYZtY5ZaRNnuzh8V22n+iVLtqoXHwq3YZA==","signatures":[{"sig":"MEYCIQCJ2e43Csf01b7M5dtq/tuX7vs+F0JHSlcNy4q5xXeszgIhAMSCa7YvR/IpS2mA7IdoeiZ/cmibm4CXNUXzMpcX++m4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2080464},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"6c28f89396b486a8a80bbc3999bb0b81713c5c3f","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.2.7_1782222198628_0.6626997307966178","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"tavi-video-tutor","version":"0.2.8","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.2.8","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"d98b4a205e6cd029d25abfe4d0e8783097032182","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.2.8.tgz","fileCount":14,"integrity":"sha512-5njgv4wJRuA0hE7D5QLPgh0gusR4tPSOSIgxu2Ergkck/JcwIO4+Xwb7hIp0ey8mS6+VckLEKk/87Caf+bWNsg==","signatures":[{"sig":"MEMCIFF3RLRmp2qE8+jm7rP7cibAqtNftsywTXCfN6NRHyQbAh9qb/OTrK7VartfATLlbSOun0FWVHsN3zJyPGM04dBu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2499563},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"f29976bf63e6f1c7766a1c219f3d9e8adbd64a2f","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.2.8_1782222539479_0.9427033868041212","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"tavi-video-tutor","version":"0.2.9","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.2.9","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"f3b57924a482e8da8ef88832d5e0a7c55758088c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.2.9.tgz","fileCount":14,"integrity":"sha512-/7QoZi/7exlQDwu5YfeA8/c7c2CyQDZ1djH9jlWF7cMxvX0fN+byjXI2AU5NgjrTE9TGy9LClgw5qqtBrkWMZg==","signatures":[{"sig":"MEYCIQCIoBRMlQQEQKnH9LoJaDXnHL72NGS33HdJ62N5KSBDyQIhAJamxp1U7zum3EG/h7lLccX+q/tVbsPVKOTckXerVHTk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2500722},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"7ca84f933671ba7c7559ead8f0e9e4c318b23830","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.2.9_1782222993038_0.8449444465020282","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"tavi-video-tutor","version":"0.3.0","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.0","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"5852b7d3bdbf9aae5bcf9df6b4f7d8fcf1bcdc54","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.0.tgz","fileCount":14,"integrity":"sha512-ben8dpIWfS7cBQRvReMxAzKV5SUT9ZymlvvTeGHdfd/TNC+vFU7/hNXOyvQKhDw18vBDbnjReFOvGfvcQf9j4Q==","signatures":[{"sig":"MEYCIQClc2M9bQ/UayKsjKsOAD5tMJR9eRY4dto2ozDJIg0ZVwIhAPBlEmaCZt2t1ptapOM2LuaKsG88kZRuj5L815RjHj5/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2500781},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"7059166545e00639eb304061b79588df25e2f4e7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.0_1782223141792_0.40811621599339665","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"tavi-video-tutor","version":"0.3.1","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.1","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"404a2e9df4171b32951c31fe4a8b316ff45adf86","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.1.tgz","fileCount":14,"integrity":"sha512-Il8y4aPDWuI9YNVdClV/jFBpcl60kDIBevHlwN3FBh/plFTIh5COTMrPJ9OBw0ARF834z1olOw+d42ShTIF9iA==","signatures":[{"sig":"MEYCIQCMvfW36QySg3ZWpdIBFhraLFB9ob6vXuCkIyfWctrCtwIhANd/ouB50B2BAA6yUDgItE6SQNN9H4VcLCuv5T1cuu7u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2500781},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"9164967121f5865fa7a6047628f66f2377580507","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.1_1782224141213_0.13990172885009988","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"tavi-video-tutor","version":"0.3.2","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.2","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"c222be182ab95e10651490dc5e1518890dd4bbdf","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.2.tgz","fileCount":14,"integrity":"sha512-VrEp0r7ETmUTs0O7UwufEOLp4z99UNjFN7gJZZ+EfHfxaaO6tNPdvvZmADvIrldlOtb/yLO0NMcVfylqaIaQNA==","signatures":[{"sig":"MEYCIQChHniF2nhiAfB/tca/nBGeOFpd8CdsUAjbjT/sXNYmNQIhAPio27W8wf8tT9TdQwWvDFJTPckJcOv25OvsmS84AgZ3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2500781},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"81fb4b191ba3a6bd769479ba8ccb2e6ccd59f296","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.2_1782226173988_0.6772990839820989","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"tavi-video-tutor","version":"0.3.3","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.3","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"dist":{"shasum":"089ca5e117851e0761649ab6b6ede1c634aa2691","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.3.tgz","fileCount":14,"integrity":"sha512-v+1Iw2aamvBRVbKdIn7gTpE7Tn8gx44CCs7Ivx+lG9ESvHvgwKFSBId4TRzzfXx1mXCWGZgSqVcJ/iVobSav6g==","signatures":[{"sig":"MEYCIQC8JADiRfXNX9nhwo5V/hT8n3T/gVn5MbtSpvcs+x671gIhAMfp+9kjhVaTyHGmhX/9Bi2jJhh29VezThdJeXnI7OhE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2502982},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"a93f246317749498b6f30d44f88c04b1f8d17e4d","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.3_1782227228879_0.14269376936138745","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"tavi-video-tutor","version":"0.3.4","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.4","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor#readme","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"dist":{"shasum":"d854fca0616911f4ef2a65816d24055b6cdd4e3d","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.4.tgz","fileCount":13,"integrity":"sha512-vtn0l8UdciWhr9IMd5kgAVW/RoJVbU0NjSA/7E30IdEiu3OTlqMZkpiMEMdRaqlVZSnxOPIMxZEdYgXwtPnC2Q==","signatures":[{"sig":"MEUCIQDixt+UTGWfSusuZXjQdB96pNP0YF7kmspHAizlVEqYJwIgNHTlvVwiDO/JWnni7wwxqS3JjHGJtmOZXCm/u34t8J4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2503153},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"dbb5909bc30fd467ea66548dc524795f00c8b244","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.4_1782227871285_0.4643664673015526","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"tavi-video-tutor","version":"0.3.5","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.5","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"dist":{"shasum":"921c2a98e6db770c206b1f652d55a00d95226c87","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.5.tgz","fileCount":13,"integrity":"sha512-EUKCKP8VtBDM5TOSryFD25T41bE/mrpLou//THrHUBqOEQ54C7nP7ynkwrNrqKXiZ8BSn8dnjCCqXBZvnQAcjg==","signatures":[{"sig":"MEUCICKskJknclWk1xumKN7bRJnfRcEl7ctYmGNYqsuZPGNSAiEA0oFAwkpvtraBmt+ZM23rb9NRfFEMBS8M3y/jJupVAhY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2503146},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"d0f34061fc28e4bb89d9642f28d780fc1956103f","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.5_1782228230984_0.0708091493082279","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"tavi-video-tutor","version":"0.3.6","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.6","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"dist":{"shasum":"75e3409a8cb608e55e17a02afb68756342b0d620","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.6.tgz","fileCount":13,"integrity":"sha512-DS/rfz/y0mA0FPtoyqK9l1BiTadBODpw1Q9xdG1etfFV9c9x5ZyS7hEhhbc19vexMboSHtKteI8DfnISCAE3og==","signatures":[{"sig":"MEQCIDJiAPqu4Tie/p+DS5LpxsGh0VTfylXic9jCuciQDVPmAiBp+bnBfhH2KFfrvjoxKN5FsYHFy6Diu/u2ahAr2UOyug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2503495},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"329da233e2ef8b14899ea0522062f699d80afc56","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.6_1782228631766_0.2319264521023201","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"tavi-video-tutor","version":"0.3.7","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.7","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"dist":{"shasum":"340a08a94d74f21d4b572635bc5040ffbef74c76","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.7.tgz","fileCount":13,"integrity":"sha512-3sh6BTt1efDtDbAXLzxHasi54QF76te41T+By0eAZoBzJP5aluWgu0MOlnhkWcX40965H/V3tAp6YvA91aUwEg==","signatures":[{"sig":"MEQCIFgx7hSY8EKMEC5DzmgDTnvpjsXkOIV/ChTKh6TgucRTAiAWOimlfOXIFqAk4yXuseh6qj/orXElcgZpg5WxS8z0+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2528352},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"e8d0272e66c91795c9083912b3436af2ca9c5660","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.7_1782658364571_0.6210508850191627","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"tavi-video-tutor","version":"0.3.8","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.8","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"dist":{"shasum":"8450b9ebb3ca2dbc2793f8d82717a61fd4a6045a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.8.tgz","fileCount":13,"integrity":"sha512-NRjbOxxt+YUo+JtAdTjpaDQUq7NtbT1EElgClYuLkZJwQgOhl+8UzsrhTswfBATjzqCkn9ascWgkW3jYNa8I4Q==","signatures":[{"sig":"MEUCIQCIDe/TH0imG3JB+1yQMpRFaWg+npO1REyYtccl3gJkJgIgTRzUExgsHnX8A2DpPOhlCwRvtD6X3y8q1cC4pwhThU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2533975},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css"},"gitHead":"e628ee9b62d8a17da70f61b3f3a82712d100490c","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.8_1782661243687_0.18747240709251578","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"tavi-video-tutor","version":"0.3.9","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.9","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"c419bf3362bb69ae6d8a7c87fb6fc96c081cf6c1","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.9.tgz","fileCount":75,"integrity":"sha512-5/0Tc637ZgNaLxsqJo2q37+Dsmlpvv2ttcP7A5Zf4Y1l6W1LeyYLZyvKFICkVCYPSfx5AXHh9DQ7LBJcbRO01g==","signatures":[{"sig":"MEUCIFobrEg691XJ+ZDLy3/XrFpmCfWYaSA/GVZB+XAKQ24yAiEAqU/sRgUJDI22xfchCz9aGMitK5qLcqVnCkefdWjJBM0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203235363},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"f5aa5d8692d0e3c1e28bfb5f5bf0547296e2ef4b","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.9_1782663902452_0.04789333324836975","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"tavi-video-tutor","version":"0.3.10","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.10","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"b8aa4ba83a7583bebb4e4015ef2352de82d65b26","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.10.tgz","fileCount":75,"integrity":"sha512-dM3pkJpCYy5Depzu0tgCp1wfV7EyxUjp7g2L32aiI6CB/tuLQhmeCUI994cNX0cDVBGKpuQCaR/+q3EL0DyoxQ==","signatures":[{"sig":"MEUCIFYXiAHc/HAY5c4h4iEKJ5yM2arL7MFnERvsfviSFtZPAiEAzNM8cKEc2qbsu6GjttBKc7wP83JhL78U02VAuBOUgyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203235347},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"01bd10bab88208d6cbcd204b616476717febbd81","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.10_1782664290234_0.32790452185444363","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"tavi-video-tutor","version":"0.3.11","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.11","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"8d6085bdbd51ff3c7dad666435ea2dbc893c69ca","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.11.tgz","fileCount":75,"integrity":"sha512-krz9Vr6mMGrNsqldfPB841cvHJWbdBS+3uydgqToP6VhbnPJM/N+KK6AMrZJKAdAisw3SnLsWR3963pavl6qdA==","signatures":[{"sig":"MEYCIQCpINAyI4hGRVyVE9MM4TWm6x8I27vKbJypALK8VdyGoQIhAOy0ObBZ8UCqTQmdL1o/NCsEsXiCNmbFt6zEF7x1unMe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203235364},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"554a03776c55d1a04ad138d381f8a6e64431ae31","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.11_1782664471512_0.9979491893892056","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"tavi-video-tutor","version":"0.3.12","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.12","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"fe2fb87c65271c3dea0b60896be2d5907b9a0dc0","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.12.tgz","fileCount":79,"integrity":"sha512-FfdPmLgh1J+MWnWA07jGUGckKP9j/rkc6yj2nib9qJ7Shi1aPwvbf2KwP6vRcKoLYobogI76k9SWC3fb4cYgYA==","signatures":[{"sig":"MEQCIAi/KYfTuZ2Gr6AjO1C4nKDXJu7DLJrHcQZAY72yz+V9AiA/QmPZfoImw0pOGRKJqGihbeXufSZ3XjyyMfGTsvkgyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203238582},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"8d022bd6168a295037604be09d646b3a16f22733","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.12_1782665716159_0.8520115088003768","host":"s3://npm-registry-packages-npm-production"}},"0.3.14":{"name":"tavi-video-tutor","version":"0.3.14","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.14","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"414f0e6b0118948d29cdba9df36ffc66b3b267cb","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.14.tgz","fileCount":79,"integrity":"sha512-OS1YuBZLKKpgqiLLKvy9LA5jXmyODs5APy6duHCG/E7WQePbIuqOALPvBV0uZ4J78mu9n4hNxE0kGrfOuE1Ywg==","signatures":[{"sig":"MEQCIGsDDv8kAjUa0v4WfHkz24qKPFujEDKtClmLT3dxnEZ7AiBrSb7tooVt20dVQ3syFWwq2pu8AyuiXDxqmYZLbnEm9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203238573},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"c32794623e2cb5e5bd7a8abffebb1d403fcb6017","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.14_1782728806591_0.7447476450669535","host":"s3://npm-registry-packages-npm-production"}},"0.3.15":{"name":"tavi-video-tutor","version":"0.3.15","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.15","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"75ff2b1c4a7fa749d60a8a2582c113d4f43b23e2","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.15.tgz","fileCount":79,"integrity":"sha512-VMxQoUZ+U/H9MylD75H6EgptEBDIvJiLFHOJN+oIML79nL0zVIvmARjvKyVBBex9yk9sbDtf4IP1gj9EB/O/Pg==","signatures":[{"sig":"MEQCIGPtok3vPqDc16zvKeKgMNCiqK5wH+EB1UULk1Eejl8iAiASmLVujuHmgNKl9543eTOI83BllAMT5vyKyEii9niKUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2203244341},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"07da18c01dc58027350e9121296f7c32fb8e9cc3","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.15_1782731668733_0.9642917896531658","host":"s3://npm-registry-packages-npm-production"}},"0.3.16":{"name":"tavi-video-tutor","version":"0.3.16","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.16","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"4cf052d2bc2e3e2ca6e4e5f47095a7551554119f","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.16.tgz","fileCount":62,"integrity":"sha512-1l0sExNcQeQ0+PPLa1Kj15geGW0va4Kymtm9Fs0dDHnUWVmWMJA9ZdVR3WcDrrk5dT2NV2ooNbY/LFHNhCdFkQ==","signatures":[{"sig":"MEUCIFRxf+6C60GLMsNzjy5qJtEiXNU+/WPmtlbIE+c0Var9AiEAvE/QfulyGfQmx8dNlzVzrP37UvaJWffni3w1QotR3Vk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3215709},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"29d01df057a904e5584aecc74c4826df03afa0f0","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.16_1782731950127_0.5029773178377033","host":"s3://npm-registry-packages-npm-production"}},"0.3.17":{"name":"tavi-video-tutor","version":"0.3.17","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.17","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"ce90a781499d9dfb3cbd902437fa9e3a24e74e04","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.17.tgz","fileCount":62,"integrity":"sha512-6GD2mcrybTQ46sE6ExYEu1Qz9IatsB4/NURb/6H/p8eVLrTLjOEtT1iRucDAftA91JaLGQQwdOTw3wNThHAQgg==","signatures":[{"sig":"MEUCIQD5Jy0n6jvD4x6rdY/Nm1RfBdPRkk9WDmwFOfwh90/ZyAIgQmMl/Tn0kEsT99sQHYu7n5u3NHCzljj6P2R8f2uwdWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218378},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"00b932b975b4d97ca583d2bcdae5a29fcfff21c5","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.17_1782733696757_0.8092518847258487","host":"s3://npm-registry-packages-npm-production"}},"0.3.18":{"name":"tavi-video-tutor","version":"0.3.18","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.18","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"da4122a3e363104937a96034683c32084b96496a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.18.tgz","fileCount":62,"integrity":"sha512-v+cOsRRaKncXiyvwxDCJm+MAJZfMbj63G4UVnOY5M5HV2LkYWnioOqp2xe9AJw/PWwvXYYza7iK0M/AZyZIe2g==","signatures":[{"sig":"MEYCIQCqm54wqWgm8dQ3OtiXUXVX5r0ZbHCyVeicugLiUvNDjAIhAJ6uhPXjjtjA4YGnysbskbUOsRXr2bGCSTniml82U4Uh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218378},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"53e4d29c9d00c1d792823767bfac8ad16e7ec235","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.18_1782735107190_0.709174440316749","host":"s3://npm-registry-packages-npm-production"}},"0.3.19":{"name":"tavi-video-tutor","version":"0.3.19","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.19","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"692e7849d26bd819f1d083fc7369725a18c7c8ab","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.19.tgz","fileCount":63,"integrity":"sha512-GYi94CJfjCLTFqAcxPqax85ki5VWir7ycFSRJWsdEI4E9eEvzKz52KWH/Ls8Gj00arXJjHEOv3YEoq+9/r8o4A==","signatures":[{"sig":"MEUCIQCEOcgHh/rjY3hbIVlJji3T3acJxOQdRGIFfDgK1nLgPgIga5cfXyvefmKM9FYLwwDnvCjpHLFELLKJmjyECrLwwfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3158446},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"a78356d4047fca5e28371dddf05823c74e2733cc","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.19_1782735973979_0.64080628819487","host":"s3://npm-registry-packages-npm-production"}},"0.3.20":{"name":"tavi-video-tutor","version":"0.3.20","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.20","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"c041520167125ebe1096cc13c0ba4a23e7c786e6","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.20.tgz","fileCount":61,"integrity":"sha512-FkvEWFpiI3uXlgBVXf32zwYO4QmuiLFxigGDeMK1c0zeeVnOad0xi0DDgHBBd/g0hDYK6HnQBcTVHB6YnzF7EQ==","signatures":[{"sig":"MEUCIDNTTIz0oRR6zDjjvNijv87sXNwE1NM2o3I/EZvOtG4IAiEAqldMsKbyt4fth2SuqEnvVAAxnfmO0SA9Yf33dBWjEuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1542487},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"d2419b9c1feaf8034e9458e432e7745be077683f","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.20_1782736341801_0.5742248829134788","host":"s3://npm-registry-packages-npm-production"}},"0.3.22":{"name":"tavi-video-tutor","version":"0.3.22","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.22","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"14a7829adf537becd762e518273eb0ebc219c338","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.22.tgz","fileCount":61,"integrity":"sha512-U8mop/98UMj4ZNCNbQvh4wQzTkDZjW0XBWQxkxyGwIcBWyrm+eb0pptOo774+LN5fnfRQNd6JpzUBYkuSmPWbg==","signatures":[{"sig":"MEQCIDhh45gSSrWVxegfzlkC9BO1++IwCBtBBkrweSUy6z99AiAFBXXvXFT77ponleZulUkKVO2GVpD3rx9ZhzqnQGdIgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1568033},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"6f78d3734cd2bdd5a48f28faa8700f909fe49057","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.22_1782736832132_0.08290089293245817","host":"s3://npm-registry-packages-npm-production"}},"0.3.24":{"name":"tavi-video-tutor","version":"0.3.24","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.24","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"a409f05283b7d2f00fb98fc648bbc6dfd2dd7d62","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.24.tgz","fileCount":62,"integrity":"sha512-BBm55lGFtN591yWdOoOzUL2YEmS8+LDqDYLEuWIwDEcZAhGoLqekUjxoHxB+V9pOZzceN4zM7QiX3ln14tyf1g==","signatures":[{"sig":"MEUCIG5dJcSGqw4LfMXCGIIHrxIL7yoyj6gGycYMfvpvaAK7AiEA+wA0HUnqLF6/Q/kqSc/2Tfd8p/dyu7+Mpu3yal3KgGg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1569051},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"cf47c858453f342465a6c768170c7b6406b42554","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.24_1782738612453_0.4049702564887654","host":"s3://npm-registry-packages-npm-production"}},"0.3.25":{"name":"tavi-video-tutor","version":"0.3.25","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.25","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"20fecec680377923a7ac16f4a4c59c32f8b5e8f1","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.25.tgz","fileCount":60,"integrity":"sha512-myNAFLi1LtYxCwgRyOK+DkDCXF1JdGg4WO7/hq/1plBgrr6yu2huaKdWEdm+qOTXH01l3iRfzaZca1pOal9LDw==","signatures":[{"sig":"MEQCIBcqJqxxpGZWoSAcnMldB9kGDApEtDGQq0sf9RWpGwjfAiBXyL9lBzncJv1ZSVu0uSJmTjpGVMpxpiA/qqybGvyTTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1627913},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"4f2fc552122af32dc59e5f4e2b64a3241eb07ff9","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.25_1782738970943_0.5695616042746898","host":"s3://npm-registry-packages-npm-production"}},"0.3.26":{"name":"tavi-video-tutor","version":"0.3.26","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.26","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"b8c4c0531a47b33c38b44b871709fb56dcb1fd4c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.26.tgz","fileCount":60,"integrity":"sha512-MVvdB8GALL+AJOp+9v4xPMVgFx9BYKUJeFck1f3WeUsKSEK1LlHE6FH6snVIoMMpQExEIc0p/tFkWIDImbLWpw==","signatures":[{"sig":"MEUCIQC4r85bCc79Hko7yvy1zitC+Ux0JalrATn1U+lpqpDVUAIgNMfHi+tKJ1WvwupXQgH67vtW9mxB51NRcDNs8ezvkYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3217998},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"70258305bc88b64efdadf15218af2f530d5fe1cf","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.26_1782740074062_0.8969276338811274","host":"s3://npm-registry-packages-npm-production"}},"0.3.27":{"name":"tavi-video-tutor","version":"0.3.27","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.27","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"b7fe3e16f0effe0bb06e79e7b3f5ae906611d6d6","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.27.tgz","fileCount":60,"integrity":"sha512-o5tXSEXT7FTtfPQl+5QzMPkJArijc3U/sMRSia77quQ/6bI6RIIMta/EwYHYsn3HIFW5RcEkdGVQqpPTaJFIkA==","signatures":[{"sig":"MEUCIDeJhFtXX1YEr7sDwuH3XxMpEeIQp7zm/4OCnIv8m2smAiEA5XAAwwE4yPl9Ijcpo0auyHr/QUwbnAtpyKphMbxqO2s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218104},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"b7e34e4496e402c41774820f1f200ffc4c8c1102","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.27_1782740675392_0.3175218547147425","host":"s3://npm-registry-packages-npm-production"}},"0.3.28":{"name":"tavi-video-tutor","version":"0.3.28","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.28","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"b7a24ff575a647b99ea6240d7415b96cd941bc1f","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.28.tgz","fileCount":60,"integrity":"sha512-A1/UNO/dGPLBBuUQicRjUBfLzI+NDaTJt//FMnjHs2eXnd0JXhQ6XGR/KkorPAqCYzX/i/eIulo3GOk7UncyPg==","signatures":[{"sig":"MEUCIQDjYlrWxbe7I3pZeO57Xu01VfH6hhS3wb3tpcSvZj0nTwIgFoqUmKZm6IFSHWKyvhQeI0LX2yMg2ctZVxsodU6naZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218156},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"902661bb989a724f0c1c827c84234da5ede1d5bc","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.28_1782741488571_0.5992459237220171","host":"s3://npm-registry-packages-npm-production"}},"0.3.29":{"name":"tavi-video-tutor","version":"0.3.29","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.29","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"b0a4372cd83721fd08e968534427dade8808e119","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.29.tgz","fileCount":60,"integrity":"sha512-ZcAuGyW+4P/z+6dQ5g23BVbohPHhiygRsxUlqT+v7mJWvtQkCocmAoNn/TN6kUJbhJ5IZtZ3HQ+eh7DZuk/AAA==","signatures":[{"sig":"MEYCIQD1L2fyz1UmNzmknX072tQG0bTDaAq5X3S00fTXVUuGUwIhANtLvQFrNPVYxsuX8RHMnFpp0oBAjzp4o04dM/VHRkf0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218176},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"ac4b5ea10d176ea062374a90165a7914ad30343d","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.29_1782741824090_0.10693402153015019","host":"s3://npm-registry-packages-npm-production"}},"0.3.30":{"name":"tavi-video-tutor","version":"0.3.30","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.30","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"93e5888a26d138e0aea807d864a27d0dff658b1c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.30.tgz","fileCount":61,"integrity":"sha512-ljHp6DiQKgdCKNFZyFxzLbL98VC7Di3nhXtB2soxHIiCBT8lGqp2ziNshKxtNFoJKf+0OYvKI09i96/vbPYgHQ==","signatures":[{"sig":"MEUCIQCuG0vmUVRsoEHqmvavzTvpe4Z4Y50lQ82KqyYRlYCvJQIgbL0ZbcuH+yEdgF6ESKL7GDVe3MEisIWU1u0UoClI+C4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3158205},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./vite-plugin":"./vite-plugin.js"},"gitHead":"c87cc7630dab35bd1edc72cee0db43b514ebf2fe","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.30_1782742436063_0.6593792994546672","host":"s3://npm-registry-packages-npm-production"}},"0.3.31":{"name":"tavi-video-tutor","version":"0.3.31","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.31","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"43bc351e24a7403e2254276d460ebea9fe6b7179","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.31.tgz","fileCount":60,"integrity":"sha512-u9WJgjMQq/0++yA5XonBA/bnNKcCdAAz+24ShnFXChPkfsyjX5nRWzdy19Mk+AxnYSg/syMvXLLB0P2+zxM+vg==","signatures":[{"sig":"MEYCIQDwxZmV7Qr45wrAZQKskCKemxlVOjuOgSpJcrS1qxlu2gIhAPh5y64rsvMxu22PjufphbignMRkf4R1ZDgfWgbCK/Us","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218176},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"a22e4da9e314c841e08f79b666dff975f48aa7a7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.31_1782742720140_0.9912344167971741","host":"s3://npm-registry-packages-npm-production"}},"0.3.32":{"name":"tavi-video-tutor","version":"0.3.32","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.32","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"41eb8839613a6f34478b641795a1c0868bc944bf","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.32.tgz","fileCount":60,"integrity":"sha512-FAn2Nj+jw4ASrLgDrZSVqm4CpO3bQMueyYM3ONi/dYYpeEAMSuK6+da966EUUjf0CjfeeGjry3BropJ3LBtiXA==","signatures":[{"sig":"MEUCIQCPMo+2U8mx0FbrscQqN4vOcz0/dZGY4LyFb9MZ5OXLKAIgOLM8LBkns7+hBHV63ZkiZlyidWYpzH9ymEfM5HSDoIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218122},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"6a7fa2e387a75197d7e3e25d57a5765cf11fd6f4","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.32_1782743102863_0.9566741435627732","host":"s3://npm-registry-packages-npm-production"}},"0.3.33":{"name":"tavi-video-tutor","version":"0.3.33","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.33","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"81209f95b52d7c0d9313f1c306189ff96fad0689","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.33.tgz","fileCount":60,"integrity":"sha512-dTK8zzk9upO+AqjIYNtz74moYgBTQgH3TT7JXqytnnZudRkokMiPNOnJOooJDEMRBeX8kof+F0AneMgLrd2NKg==","signatures":[{"sig":"MEQCIBnarjfXr1kzQ7CjIsd7kmo9/nNuPP2k14SswDnbTqjqAiAbBJCH3AfGW4Cwp3cdpc39M88XMYbAiqP9ryMH/nFntQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218352},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"ba28a6f90814a616724a843afe2536a853eaf1bb","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.33_1782743362793_0.4377056139911375","host":"s3://npm-registry-packages-npm-production"}},"0.3.34":{"name":"tavi-video-tutor","version":"0.3.34","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.34","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"cb8fd0d56038400e296d6fe2a2fddd0aa9d66880","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.34.tgz","fileCount":60,"integrity":"sha512-B2C3meAF4bo422OhDKMoZqdh3Bwmz4aBpjkxyJmFDiFWnFz5svq/4x3TeiZVnogrAynyxHGCmoBgYrmirPXxZw==","signatures":[{"sig":"MEUCIQDRWx+bTrm7duU8paN4taL4ICQudeHuURNIITSjkE72CgIgKmkILtS5c/tD3lpjSy1sLSk5kSfRZAOcVbBn9asnE44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219072},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.34_1782743897372_0.5689413457766899","host":"s3://npm-registry-packages-npm-production"}},"0.3.35":{"name":"tavi-video-tutor","version":"0.3.35","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.35","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"458ff810d53ec6d2e8bef1a4bf16f31c4d3a0469","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.35.tgz","fileCount":60,"integrity":"sha512-TvShtjsLlpygQZ4jqREhkF4t6C96iFgy/94N9eBAGx3cyTFWeuBvmVG11nIXyXFCRf65PLBbRncta0mYWSLewQ==","signatures":[{"sig":"MEYCIQD2sv7yQ530dMLa4nj++gd9+ykX8Tj6t+JVmYptFaKKSwIhAKtapkgGZdILhdxbttEN1L9LVJWFTnEBudnAUh9vm0jW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3219078},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.35_1782911251055_0.7267043729465394","host":"s3://npm-registry-packages-npm-production"}},"0.3.36":{"name":"tavi-video-tutor","version":"0.3.36","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.36","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"2a9c10046a5713ca5f47d6bb577cbe0224b9032a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.36.tgz","fileCount":60,"integrity":"sha512-HMb502W5/wa0KQAi7Werbf5O2QkAWtK8TYIx7Jqw7UxwT0sdorsdrB42l8W9PFL9oURT7pfGNKff4zPDt9YzXg==","signatures":[{"sig":"MEUCIQCKwLfk4TyVunQSwYfu6P90BGfTVlwq+kFQ8Eycx7m+WgIgLg4DTjWzlsJaED4aK3Zw79vq/BH0NIzoXLyaAjem8cc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218448},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.36_1782911443822_0.2884268329805375","host":"s3://npm-registry-packages-npm-production"}},"0.3.37":{"name":"tavi-video-tutor","version":"0.3.37","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.37","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"a1570f86f2ad894a78d2f8044718ff193365be1f","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.37.tgz","fileCount":60,"integrity":"sha512-9vfYOfGv2XkgLArZrINT8B0XOWx+3yAjC/wscIZlMGoiEOSDnBw0lmaQDE4+AhcRpjiTJMi2LgfBnSZM5tUhQA==","signatures":[{"sig":"MEQCIDSVaKvHwVhXtzWpHH+3D8SF4KEiMUPCeGeEtLVYputfAiBKXmclp+3sd2N03hUdlc6nlGaaM0ddXYpHMUOofAdo9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3218741},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.37_1782911879817_0.47864476035111947","host":"s3://npm-registry-packages-npm-production"}},"0.3.38":{"name":"tavi-video-tutor","version":"0.3.38","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.38","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"0e62c61ff2353b79abfe773a1a07c1310f7ff72f","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.38.tgz","fileCount":60,"integrity":"sha512-sOr4iuthB9BOWTmjGx77GIuPVxlde/0WccFyJp58k4NCVVb9h3ONoR7H4lagR6LABDAIlnDnmN7y5z9LJJ/etw==","signatures":[{"sig":"MEUCIQDgJtBvpCueDO3vifwK7FlK7PNPqZrpTHWo+9FU2nq/ZwIgFp11vnUwmTx7v4EACTh0rsxEsDeg5Cle6g2V2PJFovY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3224123},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.38_1782913777241_0.37191226793480214","host":"s3://npm-registry-packages-npm-production"}},"0.3.39":{"name":"tavi-video-tutor","version":"0.3.39","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.39","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"ac973d891df95033c298e2dd14fd3cc2d77f2e43","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.39.tgz","fileCount":60,"integrity":"sha512-5W0SZ6Em4wOZB0UecEWyOwbJARc06J3itPsKtu+y+RCnvcAjOoMwUFAKyjSobstwD/EvIHgFYKQYyRq//bYcXg==","signatures":[{"sig":"MEQCIG0d2HZbu3xQMs0NWUE6pnExUqbpOMMJw2GDuniBQLS/AiAURAIdPaiDYVVlSFiQ5o16MGk/mq/iwJM6dee4ryYbVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3223761},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.39_1782914189641_0.8749628806629566","host":"s3://npm-registry-packages-npm-production"}},"0.3.40":{"name":"tavi-video-tutor","version":"0.3.40","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.40","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"4f8634ae423876175c3e2ad513f4a5cc5679564c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.40.tgz","fileCount":60,"integrity":"sha512-YvAcj8SQggjJk1o+jIxUBgxagas+KgYGB9FCUcyRtmVzipZ54k8Ps9l/k0ymfIAZCJAvdFFqjK4pNWPbE+7LaA==","signatures":[{"sig":"MEQCIDZTezI0IfKeIwkx0fXxKHPyOdVup6/07+pAH+qGdxH+AiATiMhOPMnapcczVs0GhNwILhm6Vq/o5GDfhqZ2nqJSQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3223895},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.40_1782915021678_0.803606765442445","host":"s3://npm-registry-packages-npm-production"}},"0.3.41":{"name":"tavi-video-tutor","version":"0.3.41","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.41","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"c3e4eefbc69fdb6c83a136c1755c25ff1a0014ae","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.41.tgz","fileCount":60,"integrity":"sha512-AZKTLKARxiT9bB/wq6CVkr9g/WqQ0+cGHlRs1XUn+Pr2hig+XHTDJt2xcPLUzGmoAoUTC2PU0YCU0XiVN0MbaA==","signatures":[{"sig":"MEUCIBEM+NyDxrPwtJ/SOyve2M86xFxr2zVNsCSa/kZzyQZdAiEArL0dy/VVaWeBD7UFdMd28+SRGYfbDsH1c+Xbrot4BQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3223970},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.41_1782916877031_0.9983450678302903","host":"s3://npm-registry-packages-npm-production"}},"0.3.42":{"name":"tavi-video-tutor","version":"0.3.42","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.42","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"a43e3e299f2c5da1e4a3609d8746cb85f563bf24","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.42.tgz","fileCount":60,"integrity":"sha512-trn8VY3wN0jDSvFVU9wtnloVMVaQfZEU+ua/tEaHa/XjE38pRsaex5Mo4B98P/5TcyiX9A3FMzqNmbvDv0Pnjw==","signatures":[{"sig":"MEYCIQC33GgRDyqPU52BCMPBvcGANTcArziE8b9ympMGjZNLTwIhALPCdKm6k06ZFjGdKL8G2jbquc2ZFEafBT4lWAHilJXO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3224439},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.42_1782918028547_0.49547758998516","host":"s3://npm-registry-packages-npm-production"}},"0.3.43":{"name":"tavi-video-tutor","version":"0.3.43","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.43","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"987d224e6a074cf360da2a4052ee26644e2e5303","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.43.tgz","fileCount":60,"integrity":"sha512-L8ZYK1ypo+wFLX4MA43t2uedEMol5wHrLQHLA+lEbCYPrvWJgWizfO5ueU0j4oJB822SDHhLtJDTbcdDajcmog==","signatures":[{"sig":"MEYCIQD2ahvr96nNrE6F9tDvwqmykzFO3pZUN0REi2I/ktZGyQIhAOmYUp1SdAbwRnuIp4icXcsTIIZ6Lo5OSJ7E+Nt1kiE7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3223905},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.43_1782918562294_0.586078200997616","host":"s3://npm-registry-packages-npm-production"}},"0.3.44":{"name":"tavi-video-tutor","version":"0.3.44","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.44","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"d66238fed956a64a840f9e86d7234c85d699fe4c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.44.tgz","fileCount":60,"integrity":"sha512-aagJhnbwkNFk6MrFrLQiqsqIyOc/0YnF/0dkmkoBxv6Dx0Ki1jpweRzpoEC5bQCrOVpscEeRWA9nDtnpyQWOzQ==","signatures":[{"sig":"MEYCIQCOXYerA/Rxdbrj0yz14iHTae1KXrsatSxSWwuZS4HPPQIhAJa3T04e3m1Z5WjJTrxfKjABBx+ZsIlgMU1Hv/0kg84z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3224263},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.44_1782923491717_0.5457974944294142","host":"s3://npm-registry-packages-npm-production"}},"0.3.45":{"name":"tavi-video-tutor","version":"0.3.45","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.45","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"a7a5b823af16848512693b4d031f5687023cd92b","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.45.tgz","fileCount":60,"integrity":"sha512-rkBuv8nGSChDOaknGnZWaZ9W3QInVXg3OSOjAy3FeB4uqtK1wl41uc0n61vv5XiKaJ2ABFWdswpNs9BLtLBI+Q==","signatures":[{"sig":"MEQCIGkay+dmCpMlQXv1aZyn9lcPY72OlJnmNuCkXnasUHcWAiAGs4reGgiqvLPl6pQdM5QbqBq6gcZ495641pI0Z5S0tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3226375},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.45_1782926640411_0.10653376854539487","host":"s3://npm-registry-packages-npm-production"}},"0.3.46":{"name":"tavi-video-tutor","version":"0.3.46","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.46","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"2eb2c596d13cb5dd90610366c15e1155d11c9a1c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.46.tgz","fileCount":60,"integrity":"sha512-NpPKEGw2GdFYbVXVJGYwsRmK9y3N6JDrM43idlDOotfQ3B5dA+5xEOn5u6RNw8JpekNtvSGxV6GiNCURssEbDg==","signatures":[{"sig":"MEUCIQD4mtmkAiFMGFazRcLnX82Q0lsKDzA4NyKlnQfddS0jwgIgYYfI7QDE7xF/BvZEE+PH4IkMttC7f+4ICh3NlK/uN8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3226717},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.46_1782929648656_0.03912263407821026","host":"s3://npm-registry-packages-npm-production"}},"0.3.47":{"name":"tavi-video-tutor","version":"0.3.47","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.47","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"8721f3791006bb31d4ddabfed56f7b77b97d749d","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.47.tgz","fileCount":60,"integrity":"sha512-6r6SEn7gGiwD37db2E6GZDVuzR//1ESxOqscHRca8QMjXsquwjJ74UK9GVRIUKEpUe0rHoOquqqxc9QOUO18iw==","signatures":[{"sig":"MEQCIBm6+nXvm5V/AGcFQ6b4GG5rHhzj7JVQS1ni9wURIDLvAiBiOifLnXQNSF64btf8n1EaVFXvcPdV0H7OClG0calfFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3226717},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.47_1782931118607_0.7879578358791361","host":"s3://npm-registry-packages-npm-production"}},"0.3.48":{"name":"tavi-video-tutor","version":"0.3.48","keywords":["education","video","tutor","react","accessibility"],"license":"MIT","_id":"tavi-video-tutor@0.3.48","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"homepage":"https://github.com/nagendar0/tavi-video-tutor","bugs":{"url":"https://github.com/nagendar0/tavi-video-tutor/issues"},"bin":{"tavi-tutor-server":"bin/start.js"},"dist":{"shasum":"391b65a4c37ee9e3d68de57f362244119ab6f2d8","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.3.48.tgz","fileCount":60,"integrity":"sha512-eBtY7p6+abXj7Vh7QfEHZJYN9sLHtnQY0b5HBDt7vi/+u7ycx/ivFD9aMgiYP7rXqepnQu4xOBdIRy64AspGCQ==","signatures":[{"sig":"MEUCIQCMEQCtUuvuSLhyUbUG7QiJytUh8zhzuPcAd5uYEBc5KgIgIoxJigx4bO+/Wtng6MoNRaFi+kwJcpJO2omSAh+tNPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3226825},"main":"./dist/ai-tutor.umd.cjs","type":"module","module":"./dist/ai-tutor.js","exports":{".":{"import":"./dist/ai-tutor.js","require":"./dist/ai-tutor.umd.cjs"},"./vite-plugin":"./vite-plugin.js"},"gitHead":"bd3d640e879128a934712869183ab30d52fe7bd7","scripts":{"dev":"vite --host 0.0.0.0","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.","repository":{"url":"git+https://github.com/nagendar0/tavi-video-tutor.git","type":"git"},"_npmVersion":"11.8.0","description":"Privacy-first interactive video tutor with voice, whiteboard teaching, and temporary sessions.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"video.js":"^8.23.8","lucide-react":"^0.400.0","videojs-youtube":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.12","react":"^19.2.6","react-dom":"^19.2.6","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","vite-plugin-css-injected-by-js":"^5.0.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.3.48_1783002859357_0.048276469146849355","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"tavi-video-tutor","version":"0.4.0","keywords":["education","video","player","tutor","socratic","react","multilingual"],"license":"MIT","_id":"tavi-video-tutor@0.4.0","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"650d98bb9f075e1c0a99197e6bb3a81927d4258c","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.0.tgz","fileCount":45,"integrity":"sha512-h5ilRcO0doDMi+xI599ilLTOWn+16UQh++x1s68a/o720L5fYoA/S78z0xLBBCztrqQrLZQ4pvzguFDEvdvDNw==","signatures":[{"sig":"MEUCIEqghqedEqT1Wg5ObVqYfNB885N/3mGJXMuRJgzhboV9AiEAyz4+61UJKzQOGDPYKf0Rne6GKoQg4GhGiQz760fD2Vw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78946613},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","module":"./dist/tavi-video-tutor.js","exports":{".":{"import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./dist/style.css":"./dist/style.css"},"gitHead":"7b902e7aab8fa0997c69a12133228113fac78fb6","scripts":{"dev":"vite","build":"vite build","aitutor":"node ./bin/aitutor.js","preview":"vite preview","qa:subtitle":"node scripts/runCompleteSystemAudit.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Custom, zero-dependency Socratic AI video tutor player with native canvas rendering, audio dub sync, and multilingual subtitles.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@xenova/transformers":"^2.17.2"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.3.1","puppeteer":"^25.4.0","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"optionalDependencies":{"@img/sharp-win32-x64":"^0.35.3","@img/sharp-win32-arm64":"^0.35.3"},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.0_1785824332129_0.8605920172455825","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"tavi-video-tutor","version":"0.4.1","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.1","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"95b0f45b7362165bfb99935db1c09c0fc93ff705","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.1.tgz","fileCount":47,"integrity":"sha512-3nkX1+0RvOr8yfPbIQOFbGbMuUr7l1S1XbBiJ0lnJHvZCAA+0dBrAR/9oa3ExmT30Kmnys8riqcV1nt9suYoIw==","signatures":[{"sig":"MEUCIFh/c+7DQEPKW5ISg+SyTMsB+EA82FhypeX/hCv8ofS1AiEA8fpuSnsHHOeqmIH+YB5zu3JSdNoru4dlysJk1qtcL/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78951510},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./package.json":"./package.json","./dist/style.css":"./dist/style.css"},"gitHead":"789f7799e45385115eaa37da920341b3c47b8980","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@xenova/transformers":"^2.17.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.1_1785831660376_0.6890199259419922","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"tavi-video-tutor","version":"0.4.2","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.2","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"3daaa22541c4ba68949844329b4db02e99421418","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.2.tgz","fileCount":50,"integrity":"sha512-T6qKaxA4CPqC7d1PSa7ZeWhiFGgg628MmiaYB3qOyVxux/Huatt4dV6Lnjld92lzrtWD9Sd+mubERam6YIpUAA==","signatures":[{"sig":"MEQCICCR/76NetHhNKhyM92F9aAGUirCog/FjNwEG8fPfbciAiBi6054a6h8usrTVtsyVF27msogXF8Ds71w0sduYn3f4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78978629},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./package.json":"./package.json","./dist/style.css":"./dist/style.css"},"gitHead":"789f7799e45385115eaa37da920341b3c47b8980","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.2_1785838739270_0.9167984701618064","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"tavi-video-tutor","version":"0.4.3","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.3","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"cf34cd8c0d273ac1421cc79b920ac4115422b7c0","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.3.tgz","fileCount":49,"integrity":"sha512-BoBELc1mGq77mIj7TqbIVH4LepBrMfIqmoWzB59bCcDyj0NEILEbPQbqxMeGEztwNpiTMQrN4drbPX86pKe6ig==","signatures":[{"sig":"MEQCIA3HjYW4DFvP3BUe7M5m0AYQRCw8AC2WrCqN/CicPzFQAiBLEcxAAukznbYdDcSzkKBB/lseHG7ks0oLglb4iy4N+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76886348},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"ccccdc4fc3f4c772d059adb178a24c16bf33cb89","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.3_1785861437003_0.0450243841195328","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"tavi-video-tutor","version":"0.4.4","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.4","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"aaef5e9f1eaa29106f83a846a273523838c77441","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.4.tgz","fileCount":49,"integrity":"sha512-ZwN+eMr3kWRT/AJ80h7NBUomtSg4hy8AYgL0Hwvpw0Aat7UpArCZDDsEljIT9iUCkLxVGXE0yx/RjgbgFrN+Rw==","signatures":[{"sig":"MEUCIBoOKQgXWcG9/E0ZWqnDJDVDmNeynJddzmcGHH1ZHjpPAiEA2mvb5vPIK6Q1ofoe4WF1DuTj0iMGBlfNzzWu0JVHdWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76886348},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"0c60954cc2cdf49a40d160c9acf9637dc5576168","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.4_1785862825754_0.3825724408948228","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"tavi-video-tutor","version":"0.4.5","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.5","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"976c1450af0f00ab221b6774759c3d8364f8771a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.5.tgz","fileCount":49,"integrity":"sha512-ZCOfdpCmHUBBRP2ZP2yjFB5l5DJnWbSd+JWIk02Pdqvnp6y9BqorSYkYoWLNOgQjbPXc6qFDsrQnc+q00+58xw==","signatures":[{"sig":"MEQCIDpqqLIPYvZeUlS8b1uyWqScEiibZz4JjmlCP5YuicRUAiBJzEpfYltbjsqy+6GzsxPvAxYv0gnJ2yk0QFPFfr5WcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76887903},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"5bbfcce1fd88588f7be81dcf6e28f07aab9c9801","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.5_1785863938281_0.39353238777222654","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"tavi-video-tutor","version":"0.4.6","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.6","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"58094b58395a61788e108c40210fd0c900e76e3a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.6.tgz","fileCount":49,"integrity":"sha512-ft/Euo68VpGDtU/at92v0Wa3vT0sX1SU55Jrvz2Akgc8hKyezJhY4ChljZB/6Phele+ea+hF/ILwriHwvAUTrQ==","signatures":[{"sig":"MEUCIG878XW6+/y2AZ0M5cPaxSq1KpvY8LTG8BLeOI4IWcv8AiEAsIXcPJ9wSFBZESf9w/FeouQ7yyarm6JfdgS7mm6xXvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76888270},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"5bbfcce1fd88588f7be81dcf6e28f07aab9c9801","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.6_1785940517218_0.7685999866440689","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"tavi-video-tutor","version":"0.4.7","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation"],"license":"MIT","_id":"tavi-video-tutor@0.4.7","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"f2fefb2fa410c747e88abbb44adf6449150fb6cb","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.7.tgz","fileCount":49,"integrity":"sha512-m08vGvv0kM/nlFGFKCK2pdU+7oP0AQQ3+pgM6S6/faB3QSMVVdiZ50v2ltfA3QZRRgLi4SozVWOIyS50aX1Alw==","signatures":[{"sig":"MEUCIFWBe6SNHznFopFCPJgpFNb6Jt2i6P8/SEpqCRsEnqlHAiEAsA+O9e7kEKDkRrjiVgJnKUAF6BTWctB4Kl2Ch/tfVaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76908588},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"5bbfcce1fd88588f7be81dcf6e28f07aab9c9801","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.7_1785994679173_0.2811973343989731","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"tavi-video-tutor","version":"0.4.8","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@0.4.8","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"58e6e3c8d9dcd8e170442a29d52c9f40636e46d2","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.8.tgz","fileCount":54,"integrity":"sha512-k2MrKtBt0rNWxPm0+tQFDsUuTM7BmjquyZ9X2di5l0x6Jow/paNr0VOd9/iQgy1CoEjV1N7kYPMMUixJiBbFfQ==","signatures":[{"sig":"MEQCIC7d93Dg6pCqaOhN9vbsi3mPDYfTnw0+y+dDfAlzcTYaAiA2ZRYKDc7hvDj0tIGuS5Q73eu9T3RQqmrvCDojF2D7WA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76929106},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"5bbfcce1fd88588f7be81dcf6e28f07aab9c9801","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, canvas subtitle renderer, automatic video quality ladder, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.8_1786012859391_0.7854448130441534","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"tavi-video-tutor","version":"0.4.9","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@0.4.9","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"35e213a149a4b068db4b04fc3949d05e3204a81a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-0.4.9.tgz","fileCount":54,"integrity":"sha512-3HlQuXWwyYY2txEdKq/yw8w1f9zzcAfLdxa5rUITH4IENO31VQWf6FtS6XM13HE9Yk72y4kfDXxKJVExie3MKQ==","signatures":[{"sig":"MEYCIQCwtD9Eo++gLtdo1EkeCLE4M4ceGGt3ii7jhIjvi0Z28gIhAJmh9k0Js8WGKLAuogLtZ+w+xZRnY1m4+1JifPMkYzu3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76946642},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./style.css":"./dist/tavi-video-tutor.css","./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"4d165c68e204bc049f8a4512f6663c6759deb84b","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player & automated multilingual subtitle engine powered by real Whisper ASR, NLLB/M2M100 neural translation, canvas subtitle renderer, automatic video quality ladder, and multi-tier source priority.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_0.4.9_1786078118948_0.516420409011793","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"tavi-video-tutor","version":"2.0.0","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.0.0","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"c45cfb20ee8d60c0f1f8637c98e12a6c19fe5560","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.0.0.tgz","fileCount":59,"integrity":"sha512-kxtcZmavbBxeJqL8gMv72UwXhJ8QZOn8PhlViw5HiXv/6FMF1O2y04YqMmEStCF1Tqgks+qs2YI5iBpY0LHfVw==","signatures":[{"sig":"MEUCIErkJYebolqKdqULF1SZMEACyruUG6pP8ppuOwrJNb9eAiEAiYzpU2ReAAmg3RA+9TM1y6Wm7r4KyC1AEnfUPx8TSTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76963218},"main":"./dist/tavi-video-tutor.umd.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.umd.cjs"},"./*":"./*","./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./player":{"types":"./src/index.d.ts","import":"./src/components/AITutor.jsx","default":"./src/components/AITutor.jsx"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"dd10582b868e7f86f7da9931b4f7f3709549a980","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle engine powered by Web Worker VTT parsing, modular custom hooks, plugin architecture, offline IndexedDB storage, razor-sharp High-DPI canvas subtitle renderer, automatic video qualit","directories":{},"_nodeVersion":"25.6.0","dependencies":{"@huggingface/transformers":"^4.2.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.0.0_1786089461067_0.10523513270669205","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"tavi-video-tutor","version":"2.0.1","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.0.1","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"be489782ea917533035ed0f3896214957a22d232","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.0.1.tgz","fileCount":63,"integrity":"sha512-PfXpp2AiBu4RgWaEN5ZredCoktP9EMZP196LidhEogq+3mnUVwi2y+cSklzoXEcur8hT3SzeMEAusM7dAnVkIg==","signatures":[{"sig":"MEYCIQCkvBOnvUAHXWgcufd7M3EnxZFDMVu0Am2ArRwqF4RPbgIhANshz2vXMkx5ViEPDigguH0C7tHWKvDz7ynspq8JhfjX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":545689},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"dd10582b868e7f86f7da9931b4f7f3709549a980","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle engine powered by Web Worker VTT parsing, modular custom hooks, plugin architecture, offline IndexedDB storage, razor-sharp High-DPI canvas subtitle renderer, automatic video qualit","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.0.1_1786431593342_0.38917375783715524","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"tavi-video-tutor","version":"2.0.2","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.0.2","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"904da7af35e5a6a6b98aa58c202a34f983da44b3","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.0.2.tgz","fileCount":63,"integrity":"sha512-fYnD2LkPeG2/Q09fTwxTVLvI9UL5g7mt0pAG+oW/X0UyR6zgjFHa9lhY+ubZ1e/l6BVYfU09582pDyTAeHIDwA==","signatures":[{"sig":"MEYCIQDHYsI3S1Azsa/1Ltuni0zfc09d3yk5azT6lFSwhyUIWwIhAImEQLsCMAdtVu/hZYbj+cbXYM9ap5GQ4i/8FWeVgfCh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551732},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"dd10582b868e7f86f7da9931b4f7f3709549a980","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle engine powered by Web Worker VTT parsing, modular custom hooks, plugin architecture, offline IndexedDB storage, razor-sharp High-DPI canvas subtitle renderer, automatic video qualit","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.0.2_1786442148407_0.7912417644958627","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"tavi-video-tutor","version":"2.1.0","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.1.0","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"720db356427b098092962c6ebca23e04ccd0bd3b","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.1.0.tgz","fileCount":68,"integrity":"sha512-ANPSJ7EyhcIVYINZke+HWLmLejWZdWIGTYJYOZ+p0JuIMNgdorsdGxbWvH7+sSsA7yVzMWULAgu8ADqGfSTkOQ==","signatures":[{"sig":"MEQCIC3wWaUTXHHTH0AXJ203fsAfAALDeK1NTtrLcoTMjrU8AiB2l+pzbxgu2T7lti9g/uH9gypkHwEoXIdbGqF576ZZkQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":593092},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./audio":{"import":"./src/subtitles/resolver/audioResolver.js","default":"./src/subtitles/resolver/audioResolver.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"e3f3b449c7292c9a8fb232a168136c527e76485e","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.1.0_1786525253877_0.1228553638605634","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"tavi-video-tutor","version":"2.1.1","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.1.1","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"ae08b71adfa5ae67096fbab1f00c0f8aa0384ae4","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.1.1.tgz","fileCount":73,"integrity":"sha512-VkXCCktJ9vstezZthq+gONzev4+h9DoYnFPaXI6CmAQXvs1KL2qKXkwWGMmxX+KvG9z8Q3bIvoTnIZWgma2FFg==","signatures":[{"sig":"MEUCICCyR8pyvMTQgTEvTOUQwkPl11wIzZJQ6NWRFN3pgHQTAiEAh9zlsncwb1R9TJjBYoYdGHwMr2hIRf2OIfaptClOUAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":725379},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./audio":{"types":"./src/subtitles/resolver/audioResolver.d.ts","import":"./src/subtitles/resolver/audioResolver.js","default":"./src/subtitles/resolver/audioResolver.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./quality":{"types":"./src/subtitles/resolver/qualityResolver.d.ts","import":"./src/subtitles/resolver/qualityResolver.js","default":"./src/subtitles/resolver/qualityResolver.js"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"types":"./src/subtitles/resolver/subtitleResolver.d.ts","import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"a47525c275d05abf67317f220d16463ff753a723","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","@huggingface/transformers":"^4.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"@huggingface/transformers":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.1.1_1787133946647_0.8601986867275222","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"tavi-video-tutor","version":"2.1.2","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.1.2","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"abffb73707ae0d4c1533c707f922cc3a80212895","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.1.2.tgz","fileCount":75,"integrity":"sha512-NRGWBroYl75A3uMwoR9RBUXAqru5rsNU2vavuoObQnsQOTY5ipTGkCnzkLWRjUGU0uH89qIC1WzJC+DytiOz0A==","signatures":[{"sig":"MEYCIQDmAA4otodS8YBuoi6Sogz0eeZoRL5M1nyZmq8KymGveQIhAK7dZcVeb8f0d0t4ARbLPhrYwtUS0z9wmRjsAHvAkry6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791368},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./audio":{"types":"./src/subtitles/resolver/audioResolver.d.ts","import":"./src/subtitles/resolver/audioResolver.js","default":"./src/subtitles/resolver/audioResolver.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./quality":{"types":"./src/subtitles/resolver/qualityResolver.d.ts","import":"./src/subtitles/resolver/qualityResolver.js","default":"./src/subtitles/resolver/qualityResolver.js"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"types":"./src/subtitles/resolver/subtitleResolver.d.ts","import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"a47525c275d05abf67317f220d16463ff753a723","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","@huggingface/transformers":"^4.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"@huggingface/transformers":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.1.2_1788361138568_0.8926866273254215","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"tavi-video-tutor","version":"2.2.0","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"license":"MIT","_id":"tavi-video-tutor@2.2.0","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"e08566820a5573be17dfdf5a1c32c6fbf44fd28a","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.2.0.tgz","fileCount":89,"integrity":"sha512-iUbaA3yTuFKlP/t0MEGm+/o6B+P59NEszbEPFuN4pJYlIGU1iF4iAxKIVusIPze5rXryp9wfbc/3hDvvIofJng==","signatures":[{"sig":"MEQCIDMJkWwBHyBnfiAb51soRds6qvGvTVSHgVgfXoYwTYhFAiAXYvZbO5PRx5XJ3JRngOQbLar/V02zp1t2pk88BKhhQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":899875},"main":"./dist/tavi-video-tutor.cjs","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./audio":{"types":"./src/subtitles/resolver/audioResolver.d.ts","import":"./src/subtitles/resolver/audioResolver.js","default":"./src/subtitles/resolver/audioResolver.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./quality":{"types":"./src/subtitles/resolver/qualityResolver.d.ts","import":"./src/subtitles/resolver/qualityResolver.js","default":"./src/subtitles/resolver/qualityResolver.js"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"types":"./src/subtitles/resolver/subtitleResolver.d.ts","import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css"},"gitHead":"bfe0c2ca4c297dfc2d90b5d4c59670bc4408fe37","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","@huggingface/transformers":"^4.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"@huggingface/transformers":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/tavi-video-tutor_2.2.0_1788770463967_0.3724457944488422","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"_id":"tavi-video-tutor@2.2.1","bin":{"aitutor":"bin/aitutor.js"},"dist":{"shasum":"bae680320ff3db97f334540057efd03b8b6ea7e9","tarball":"https://registry.npmjs.org/tavi-video-tutor/-/tavi-video-tutor-2.2.1.tgz","fileCount":136,"integrity":"sha512-zZIbIhnowTc6WtRy6nz9xf307FYJrhRdPEGZpK6ALD2WS2YYH6Kk0PiEugUpG/cM/kUDJG5jyvfkyFRt6yeMzg==","signatures":[{"sig":"MEYCIQCUar5RnvVQYcyCvIUjcxUpGayrEAGCWWk4kgAKCpP9hwIhANyeGGbErsJPHELXxFRhigp4tWRxnw7U+tx5OGz+4e3c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICxHZKM83hr6cTjrhYxH1jjkvdmtjmuZjzV35iqVxi0xAiEA8rPh22CpgTixhQ79RtO8E4YXnH9x9EqGnYis6EH4tdw="}],"unpackedSize":2088125},"main":"./dist/tavi-video-tutor.cjs","name":"tavi-video-tutor","type":"module","types":"./src/index.d.ts","module":"./dist/tavi-video-tutor.js","exports":{".":{"types":"./src/index.d.ts","import":"./dist/tavi-video-tutor.js","require":"./dist/tavi-video-tutor.cjs"},"./cli":{"import":"./src/cli/cli.js","default":"./src/cli/cli.js"},"./tts":{"types":"./src/subtitles/tts/index.d.ts","import":"./src/subtitles/tts/index.js","default":"./src/subtitles/tts/index.js"},"./audio":{"types":"./src/subtitles/resolver/audioResolver.d.ts","import":"./src/subtitles/resolver/audioResolver.js","default":"./src/subtitles/resolver/audioResolver.js"},"./cache":{"types":"./src/subtitles/cache/ModelCacheManager.d.ts","import":"./src/subtitles/cache/index.js","default":"./src/subtitles/cache/index.js"},"./errors":{"types":"./src/subtitles/errors/index.d.ts","import":"./src/subtitles/errors/index.js","default":"./src/subtitles/errors/index.js"},"./models":{"types":"./src/subtitles/models/modelRegistry.d.ts","import":"./src/subtitles/models/modelRegistry.js","default":"./src/subtitles/models/modelRegistry.js"},"./player":{"types":"./src/index.d.ts","import":"./dist/player.js","default":"./dist/player.js","require":"./dist/player.cjs"},"./policy":{"types":"./src/subtitles/policy/PolicyEngine.d.ts","import":"./src/subtitles/policy/index.js","default":"./src/subtitles/policy/index.js"},"./network":{"types":"./src/subtitles/network/index.d.ts","import":"./src/subtitles/network/index.js","default":"./src/subtitles/network/index.js"},"./quality":{"types":"./src/subtitles/resolver/qualityResolver.d.ts","import":"./src/subtitles/resolver/qualityResolver.js","default":"./src/subtitles/resolver/qualityResolver.js"},"./languages":{"types":"./src/subtitles/languages/capabilityResolver.d.ts","import":"./src/subtitles/languages/capabilityResolver.js","default":"./src/subtitles/languages/capabilityResolver.js"},"./style.css":"./dist/tavi-video-tutor.css","./subtitles":{"types":"./src/subtitles/resolver/subtitleResolver.d.ts","import":"./src/subtitles/resolver/subtitleResolver.js","default":"./src/subtitles/resolver/subtitleResolver.js"},"./package.json":"./package.json","./dist/style.css":"./dist/tavi-video-tutor.css","./dist/tavi-video-tutor.css":"./dist/tavi-video-tutor.css"},"gitHead":"dd5801b239b0b2c04d3f24f18781d84502d343db","license":"MIT","scripts":{"dev":"vite","test":"node --test test/*.test.js","build":"vite build","preview":"vite preview","test:qa":"node scripts/runEdgeCaseAndProductionQA.js"},"version":"2.2.1","_npmUser":{"name":"nagendar_00123","email":"nagendern986@gmail.com"},"keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"_npmVersion":"11.8.0","description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","directories":{},"maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"_nodeVersion":"25.6.0","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.1","@vitejs/plugin-react":"^6.0.5","@huggingface/transformers":"^4.2.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","@huggingface/transformers":"^4.2.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true},"@huggingface/transformers":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tavi-video-tutor_2.2.1_1790848330287_0.3614652339574549"}}},"time":{"created":"2026-06-21T17:09:08.238Z","modified":"2026-10-01T09:52:10.612Z","0.1.0":"2026-06-19T17:57:08.784Z","0.2.0":"2026-06-20T09:35:47.611Z","0.2.1":"2026-06-20T09:55:05.212Z","0.2.2":"2026-06-20T10:05:43.078Z","0.2.3":"2026-06-20T10:36:09.890Z","0.2.4":"2026-06-20T11:04:32.351Z","0.2.5":"2026-06-21T17:09:08.476Z","0.2.6":"2026-06-23T09:38:48.526Z","0.2.7":"2026-06-23T13:43:18.811Z","0.2.8":"2026-06-23T13:48:59.618Z","0.2.9":"2026-06-23T13:56:33.193Z","0.3.0":"2026-06-23T13:59:02.049Z","0.3.1":"2026-06-23T14:15:41.402Z","0.3.2":"2026-06-23T14:49:34.147Z","0.3.3":"2026-06-23T15:07:09.089Z","0.3.4":"2026-06-23T15:17:51.477Z","0.3.5":"2026-06-23T15:23:51.187Z","0.3.6":"2026-06-23T15:30:31.962Z","0.3.7":"2026-06-28T14:52:44.810Z","0.3.8":"2026-06-28T15:40:43.875Z","0.3.9":"2026-06-28T16:25:02.694Z","0.3.10":"2026-06-28T16:31:30.502Z","0.3.11":"2026-06-28T16:34:31.783Z","0.3.12":"2026-06-28T16:55:16.435Z","0.3.14":"2026-06-29T10:26:46.818Z","0.3.15":"2026-06-29T11:14:29.002Z","0.3.16":"2026-06-29T11:19:10.301Z","0.3.17":"2026-06-29T11:48:16.917Z","0.3.18":"2026-06-29T12:11:47.380Z","0.3.19":"2026-06-29T12:26:14.239Z","0.3.20":"2026-06-29T12:32:22.015Z","0.3.22":"2026-06-29T12:40:32.296Z","0.3.24":"2026-06-29T13:10:12.608Z","0.3.25":"2026-06-29T13:16:11.132Z","0.3.26":"2026-06-29T13:34:34.224Z","0.3.27":"2026-06-29T13:44:35.644Z","0.3.28":"2026-06-29T13:58:08.728Z","0.3.29":"2026-06-29T14:03:44.301Z","0.3.30":"2026-06-29T14:13:56.231Z","0.3.31":"2026-06-29T14:18:40.318Z","0.3.32":"2026-06-29T14:25:03.119Z","0.3.33":"2026-06-29T14:29:23.030Z","0.3.34":"2026-06-29T14:38:17.585Z","0.3.35":"2026-07-01T13:07:31.282Z","0.3.36":"2026-07-01T13:10:44.066Z","0.3.37":"2026-07-01T13:18:00.034Z","0.3.38":"2026-07-01T13:49:37.465Z","0.3.39":"2026-07-01T13:56:29.867Z","0.3.40":"2026-07-01T14:10:21.882Z","0.3.41":"2026-07-01T14:41:17.230Z","0.3.42":"2026-07-01T15:00:28.766Z","0.3.43":"2026-07-01T15:09:22.562Z","0.3.44":"2026-07-01T16:31:31.935Z","0.3.45":"2026-07-01T17:24:00.612Z","0.3.46":"2026-07-01T18:14:08.916Z","0.3.47":"2026-07-01T18:38:38.814Z","0.3.48":"2026-07-02T14:34:19.627Z","0.4.0":"2026-08-04T06:18:52.735Z","0.4.1":"2026-08-04T08:21:00.964Z","0.4.2":"2026-08-04T10:18:59.783Z","0.4.3":"2026-08-04T16:37:17.493Z","0.4.4":"2026-08-04T17:00:26.275Z","0.4.5":"2026-08-04T17:18:58.847Z","0.4.6":"2026-08-05T14:35:17.691Z","0.4.7":"2026-08-06T05:37:59.651Z","0.4.8":"2026-08-06T10:41:00.408Z","0.4.9":"2026-08-07T04:48:39.491Z","2.0.0":"2026-08-07T07:57:41.538Z","2.0.1":"2026-08-11T06:59:53.544Z","2.0.2":"2026-08-11T09:55:48.542Z","2.1.0":"2026-08-12T09:00:54.067Z","2.1.1":"2026-08-19T10:05:46.845Z","2.1.2":"2026-09-02T14:58:58.717Z","2.2.0":"2026-09-07T08:41:04.114Z","2.2.1":"2026-10-01T09:52:10.442Z"},"license":"MIT","keywords":["aitutor","tavi-video-tutor","subtitles","webvtt","whisper","nllb","multilingual","react-video-player","asr","translation","video-quality","h264-transcoding"],"description":"Enterprise-grade React video player SDK & automated multilingual subtitle & audio dubbing engine powered by Web Worker VTT parsing, TTS speech synthesis, timestamp alignment, automatic video quality ladder, and WAI-ARIA accessibility.","maintainers":[{"name":"nagendar_00123","email":"nagendern986@gmail.com"}],"readme":"# AITutor\r\n\r\nAITutor is an open-source React video player and Socratic AI tutor engine with no native AI runtime dependencies for the browser player, native canvas rendering, audio dub sync, automated WebVTT subtitle generation across 109 language registry definitions (with 13 neural TTS dubbing languages), and an automated multi-resolution video quality transcoding pipeline. It combines FFmpeg audio extraction, Whisper speech recognition, transcript normalization, cue segmentation, multilingual translation, and H.264 video quality ladder generation into a unified developer SDK.\r\n\r\n```jsx\r\nimport { AITutor } from \"tavi-video-tutor\";\r\nimport \"tavi-video-tutor/dist/style.css\";\r\n\r\nexport default function App() {\r\n  return <AITutor src=\"/lesson.mp4\" />;\r\n}\r\n```\r\n\r\n```bash\r\n# Generate WebVTT subtitles, video quality renditions, and manifest\r\nnpx aitutor\r\n```\r\n\r\n---\r\n\r\n## 1. WHAT'S NEW IN v2.1.1 — PREFLIGHT ENVIRONMENT SETUP & MULTILINGUAL AUDIO ARCHITECTURE\r\n\r\n### 🚀 CLI Preflight Environment Setup (`npx aitutor doctor`, `setup`, `generate`)\r\n- **Automated Environment Verification**: Checks Node.js, FFmpeg, FFprobe, Whisper provider (@huggingface/transformers), Whisper neural models, Translation router, TTS provider, cache directories, and free disk space before media processing.\r\n- **Controlled Process Execution**: Eliminates unhandled ENOENT crashes and provides actionable remediation guidance or automatic installation via Windows Package Manager (`winget`).\r\n\r\n### ⚡ Pure Lightweight Browser Player (`tavi-video-tutor/player`)\r\n- **Zero AI Runtime Bloat**: Normal player imports (`import { AITutor } from \"tavi-video-tutor/player\"`) bundle only the vector-sharp React video player, canvas subtitle renderer, and resolution hooks with **0 ONNX WASM runtime files** and **0 Transformers overhead**.\r\n- **On-Demand Auto-Transcription**: In-browser Whisper ASR speech-to-text is fully isolated behind dynamic import and only loaded if `autoTranscribe={true}` is explicitly passed.\r\n\r\n### 🔍 Razor-Sharp High-DPI Canvas Rendering (`devicePixelRatio`)\r\n- **Retina & 4K Auto-Scaling**: Automatically detects `window.devicePixelRatio` and scales the canvas backing store resolution (`canvas.width = rect.width * dpr`) to guarantee vector-sharp subtitle typography on MacBook Retina displays, 4K monitors, Surface devices, and high-DPI mobile screens.\r\n- **Zero-Allocation 60fps Rendering Loop**: Prevents layout thrashing and V8 Garbage Collection micro-stutters during 4K video playback.\r\n\r\n### ♿ Full WAI-ARIA Accessibility & Screen Reader Support (Section 508)\r\n- **Screen Reader Live Region (`aria-live=\"polite\"`)**: Includes a visually-hidden live region (`<div className=\"sr-only\" aria-live=\"polite\">`) that synchronizes and announces active subtitle text for visually impaired students using VoiceOver, NVDA, or JAWS.\r\n- **Comprehensive WAI-ARIA Controls**: Full `aria-label`, `aria-expanded`, `aria-pressed`, `aria-valuenow`, `aria-valuemin`, `aria-valuemax`, and `:focus-visible` outline indicators across all player buttons and volume sliders.\r\n\r\n### 💾 LocalStorage Student Preference Persistence\r\n- **Automatic Preference Restoration**: Student player choices (`volume`, `isMuted`, `playbackRate`, `selectedSubLanguage`, `selectedQuality`) are automatically saved to `localStorage` (`aitutor_user_preferences`) and restored seamlessly across course modules and page reloads.\r\n\r\n### 🌲 Tree-Shakeable Sub-Path Package Exports\r\n- **Modular Entrypoints**: Sub-path exports configured in `package.json`:\r\n  - `import { AITutor } from \"tavi-video-tutor\";` (Main bundle)\r\n  - `import { AITutor } from \"tavi-video-tutor/player\";` (Pure React Player - Zero CLI bloat)\r\n  - `import { resolveSubtitleAvailability } from \"tavi-video-tutor/subtitles\";` (Resolver logic)\r\n  - `import { resolveAudioAvailability } from \"tavi-video-tutor/audio\";` (Audio Resolver logic)\r\n  - `import \"tavi-video-tutor/style.css\";` (CSS styling)\r\n\r\n### 🚀 Next.js & Server-Side Rendering (SSR) Integration\r\n- **SSR Safe**: Fully safe for Next.js (App Router & Pages Router) using `next/dynamic` with `ssr: false`:\r\n```jsx\r\n// components/VideoPlayer.jsx\r\nimport dynamic from 'next/dynamic';\r\nimport 'tavi-video-tutor/style.css';\r\n\r\nconst AITutor = dynamic(() => import('tavi-video-tutor/player').then(m => m.AITutor), {\r\n  ssr: false\r\n});\r\n\r\nexport default function VideoLesson() {\r\n  return <AITutor src=\"/lesson.mp4\" />;\r\n}\r\n```\r\n\r\n---\r\n\r\n## 2. FEATURES\r\n\r\n- **React Video Tutor Component**: Custom HTML5 video player with subtitle rendering, audio dub sync, automatic video quality ladder selection (`144p` to `1080p`), canvas rendering, and modal editing.\r\n- **Automated Video Quality Transcoding Pipeline**: Multi-resolution H.264/AAC quality ladder generation (`720p`, `480p`, `360p`, `240p`, `144p`) with aspect ratio preservation and no-upscaling guarantee.\r\n- **Automated Subtitle Pipeline**: End-to-end processing from video file to Whisper speech-to-text, transcript normalization, cue segmentation, and WebVTT generation.\r\n- **109-Language Registry**: Standardized language metadata definitions for 109 global languages (13 languages with neural TTS capability present in the registry, 95 currently unsupported/unverified for production TTS, 1 partial entry) with full Right-to-Left (RTL) support for Arabic, Hebrew, Urdu, etc.\r\n- **Hybrid Online/Offline Translation**: High-speed online translation with automatic offline local NLLB (`@xenova/transformers`) fallback.\r\n- **Content-Aware Media Identity**: Smart cache fingerprinting based on canonical path, size, modification timestamp, and sampled binary content chunks (head + middle + tail 64KB).\r\n- **Four-Tier Subtitle Priority**: Smart resolver supporting User Uploaded > Developer Manual > Generated > Demo Fallback tracks per language.\r\n- **Local & Remote Video Resolution**: Safe resolution for local assets (`public/`) and remote HTTP/HTTPS video streams with built-in SSRF protection.\r\n- **CLI Management Suite**: Complete command-line tools for subtitle generation, cache status auditing, WebVTT validation, and selective cache cleanup.\r\n\r\n---\r\n\r\n## 3. HOW AITUTOR WORKS\r\n\r\nAITutor separates expensive heavy media processing (audio extraction, speech-to-text, multilingual translation, and multi-resolution video transcoding) from lightweight runtime client rendering:\r\n\r\n```text\r\n                        Video File (Local / Remote)\r\n                                     │\r\n            ┌────────────────────────┴────────────────────────┐\r\n            ▼                                                 ▼\r\n[ Subtitle Processing Pipeline ]             [ Video Quality Transcoding Pipeline ]\r\n            │                                                 │\r\nFFmpeg Audio Extraction (16kHz PCM WAV)             FFmpeg Probe Video Metadata\r\n            │                                                 │\r\nWhisper Speech-to-Text (Master Transcript)          Quality Ladder Planner (Height <= Source)\r\n            │                                                 │\r\nTranscript Normalizer (Glossary Preservation)       Multi-Resolution H.264/AAC Encoder\r\n            │                                       (720p, 480p, 360p, 240p, 144p)\r\nSubtitle Segmenter (Readability & Timing)                     │\r\n            │                                                 │\r\nMultilingual Translation (Online / Offline NLLB)              │\r\n            │                                                 │\r\nWebVTT File Generator (en.vtt, te.vtt...)                      │\r\n            │                                                 │\r\n            └────────────────────────┬────────────────────────┘\r\n                                     ▼\r\n                      Manifest Store (/public/aitutor/manifest.json)\r\n                                     ▼\r\n                <AITutor /> Player (Renders VTT & Transcoded Qualities)\r\n```\r\n\r\n- **Preprocessing Stage**: The CLI command `npx aitutor` probes video files, runs Whisper ASR speech-to-text, translates transcriptions into target languages, transcodes downscaled H.264/AAC quality renditions (`720p`, `480p`, `360p`, `240p`, `144p`), writes static assets to `public/aitutor/`, and registers everything in `public/aitutor/manifest.json`.\r\n- **Runtime Stage**: When `<AITutor src=\"/lesson.mp4\" />` mounts in the browser, it loads `/aitutor/manifest.json`, discovers available WebVTT subtitle tracks and video quality renditions, and enables dynamic language & quality switching. Heavy processing (FFmpeg/Whisper/Transcoding) **never** runs in the student's browser.\r\n\r\n\r\n---\r\n\r\n## 4. REQUIREMENTS & DEPENDENCY ARCHITECTURE\r\n\r\n### Base Package\r\n- **Production Dependencies**: `ws` (`^8.18.0`) is the sole production runtime dependency of the package (used for server-side / CLI Edge TTS synthesis).\r\n- **Node.js**: `v18.0.0` or higher.\r\n- **npm**: `v9.0.0` or higher.\r\n- **Browsers**: Any modern browser supporting HTML5 Video and ES2022 JavaScript (Chrome, Firefox, Safari, Edge).\r\n\r\n### Optional Peer Dependencies\r\n- **React & React-DOM**: `^18.0.0 || ^19.0.0` (Optional peer dependencies; required only if rendering the `<AITutor />` browser video player component in a React application).\r\n- **@huggingface/transformers**: `^4.2.0` (Optional peer dependency; required only for CLI speech-to-text / Whisper transcription and local NLLB translation via `npx aitutor generate`). The browser player bundle does NOT load or require this runtime.\r\n\r\n### External System Dependencies\r\n- **FFmpeg & FFprobe**: Required for CLI audio extraction, media probing, and multi-resolution video quality ladder transcoding. Must be on system PATH or configured via `process.env.FFMPEG_PATH` and `process.env.FFPROBE_PATH`. (Windows: `winget install Gyan.FFmpeg`, macOS: `brew install ffmpeg`, Linux: `sudo apt install ffmpeg`).\r\n\r\n### Optional Native Models & Runtimes\r\n- **Local Whisper Model**: Required for offline speech-to-text (e.g. `onnx-community/whisper-tiny`).\r\n- **Local NLLB Model**: Required for offline translation (`Xenova/nllb-200-distilled-600M`).\r\n- **Local TTS Engines**: Platform-supported local synthesis (Windows OneCore/SAPI, Piper, Kokoro, Meta MMS).\r\n\r\n---\r\n\r\n## 5. INSTALLATION\r\n\r\n### Base Package Installation (React Video Player SDK & CLI utilities)\r\n```bash\r\nnpm install tavi-video-tutor\r\n```\r\n\r\n### For React Web Applications (Peer Dependencies)\r\nIf using the React video player component `<AITutor />`, ensure React is installed:\r\n```bash\r\nnpm install react react-dom\r\n```\r\n\r\n### For Subtitle Generation & Whisper Speech-to-Text (Optional Runtime)\r\nTo enable local speech-to-text and offline NLLB translation in the CLI (`npx aitutor generate`), install the optional peer dependency:\r\n```bash\r\nnpm install @huggingface/transformers\r\n# or run interactive environment setup:\r\nnpx aitutor setup\r\n```\r\n\r\n---\r\n\r\n## 6. YOUR FIRST AITUTOR VIDEO\r\n\r\n### 1. Place your video in `public/`\r\nCopy your video file into the `public` directory of your React project:\r\n\r\n```text\r\nmy-tutor-app/\r\n├── public/\r\n│   └── lesson.mp4\r\n├── src/\r\n│   └── App.jsx\r\n├── package.json\r\n└── ...\r\n```\r\n\r\n### 2. Add `<AITutor />` to your React component\r\nIn `src/App.jsx`:\r\n\r\n```jsx\r\nimport React from 'react';\r\nimport { AITutor } from 'tavi-video-tutor';\r\nimport 'tavi-video-tutor/dist/style.css';\r\n\r\nexport default function App() {\r\n  return (\r\n    <div style={{ width: '100%', maxWidth: '960px', margin: '0 auto', aspectRatio: '16/9' }}>\r\n      <AITutor src=\"/lesson.mp4\" />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n## 7. AUTOMATIC SUBTITLE & VIDEO QUALITY GENERATION\r\n\r\nFollow this step-by-step workflow to generate multilingual subtitles and video quality renditions for your videos from zero:\r\n\r\n### Step 1: Create Starter Configuration (`npx aitutor init`)\r\nRun `npx aitutor init` to generate `aitutor.config.mjs` starter configuration automatically:\r\n\r\n```bash\r\nnpx aitutor init\r\n```\r\n\r\nOr create `aitutor.config.mjs` manually in your project root:\r\n\r\n```javascript\r\nexport default {\r\n  subtitles: {\r\n    languages: ['en', 'es', 'hi', 'te'], // Target subtitle languages (or 'all' for all 109 registry languages)\r\n    quality: 'balanced',                 // 'fast' | 'balanced' | 'high'\r\n    glossary: ['React', 'AITutor']       // Protected domain terms\r\n  },\r\n  qualities: {\r\n    generate: true,                      // Automatically generate quality ladder (720p, 480p, 360p, 240p, 144p)\r\n    targets: [1080, 720, 480, 360, 240, 144]\r\n  },\r\n  videos: [\r\n    {\r\n      id: 'lesson',\r\n      src: './public/lesson.mp4',\r\n      languages: ['en', 'es', 'hi', 'te']\r\n    }\r\n  ]\r\n};\r\n```\r\n\r\n#### Supported Configuration Formats\r\n\r\nAITutor automatically detects and loads any of the following configuration files in your project root:\r\n\r\n- **`aitutor.config.mjs` (ESM — Recommended)**:\r\n  ```javascript\r\n  export default {\r\n    subtitles: { languages: ['en', 'es', 'hi', 'te'] },\r\n    qualities: { generate: true },\r\n    videos: [{ id: 'lesson', src: './public/lesson.mp4' }]\r\n  };\r\n  ```\r\n- **`aitutor.config.cjs` (CommonJS)**:\r\n  ```javascript\r\n  module.exports = {\r\n    subtitles: { languages: ['en', 'es', 'hi', 'te'] },\r\n    qualities: { generate: true },\r\n    videos: [{ id: 'lesson', src: './public/lesson.mp4' }]\r\n  };\r\n  ```\r\n- **`aitutor.config.json` (JSON)**:\r\n  ```json\r\n  {\r\n    \"subtitles\": { \"languages\": [\"en\", \"es\", \"hi\", \"te\"] },\r\n    \"qualities\": { \"generate\": true },\r\n    \"videos\": [{ \"id\": \"lesson\", \"src\": \"./public/lesson.mp4\" }]\r\n  }\r\n  ```\r\n- **`aitutor.config.js`**: Uses `export default` when host `package.json` contains `\"type\": \"module\"`, or `module.exports` when host `package.json` uses CommonJS.\r\n\r\n### Step 2: Run the AITutor Generator\r\nRun the CLI generator from your project terminal:\r\n\r\n```bash\r\nnpx aitutor\r\n```\r\n\r\n### Execution Output:\r\n```text\r\nAITUTOR PIPELINE ENGINE\r\n─────────────────────────────\r\nProcessing video 1 of 1: lesson\r\n  → Probing video metadata for lesson (1920x1080 @ 30fps)\r\n  ✓ Quality plan: 1080p, 720p, 480p, 360p, 240p, 144p\r\n  ✓ 1080p (source file preserved)\r\n  → Generating 720p [████████████████████] 100%\r\n  ✓ 720p complete (8.2 MB)\r\n  → Generating 480p [████████████████████] 100%\r\n  ✓ 480p complete (5.1 MB)\r\n  → Generating 360p [████████████████████] 100%\r\n  ✓ 360p complete (3.3 MB)\r\n  → Generating 240p [████████████████████] 100%\r\n  ✓ 240p complete (2.1 MB)\r\n  → Generating 144p [████████████████████] 100%\r\n  ✓ 144p complete (1.2 MB)\r\n  → Reading video URL with FFmpeg\r\n  → Extracting audio stream\r\n  ✓ Audio extracted (audio.wav, 2.40 MB)\r\n  → Running Whisper Speech-to-Text\r\n  ✓ Detected source language: English\r\n  ✓ Segments count: 12\r\n  → Generating WebVTT subtitles\r\n  ✓ Generated en.vtt [PASS]\r\n  ✓ Generated es.vtt [PASS]\r\n  ✓ Generated hi.vtt [PASS]\r\n  ✓ Generated te.vtt [PASS]\r\n✓ Video lesson completed successfully\r\n```\r\n\r\n---\r\n\r\n## 8. GENERATED ASSETS STRUCTURE\r\n\r\nSubtitle generation and video quality transcoding output public production assets and maintain an internal processing cache:\r\n\r\n```text\r\nmy-tutor-app/\r\n├── public/\r\n│   ├── lesson.mp4                          # ORIGINAL SOURCE VIDEO\r\n│   └── aitutor/                            # PUBLIC ASSETS (Deploy to Production)\r\n│       ├── manifest.json                   # Subtitles & Quality registry index\r\n│       ├── videos/\r\n│       │   └── lesson/                     # TRANSCODED QUALITIES\r\n│       │       ├── 720.mp4\r\n│       │       ├── 480.mp4\r\n│       │       ├── 360.mp4\r\n│       │       ├── 240.mp4\r\n│       │       └── 144.mp4\r\n│       └── subtitles/\r\n│           └── lesson/                     # MULTILINGUAL SUBTITLES\r\n│               ├── en.vtt\r\n│               ├── es.vtt\r\n│               ├── hi.vtt\r\n│               └── te.vtt\r\n│\r\n└── .aitutor/                               # INTERNAL CACHE (DO NOT Commit/Deploy)\r\n    ├── manifest.json\r\n    ├── transcripts/\r\n    │   └── lesson.json                     # Master ASR transcript cache\r\n    └── videos/                             # Transcoding cache\r\n```\r\n\r\n- **`public/aitutor/`**: Production static artifacts loaded by browser client. Must be included in your static site deployment.\r\n- **`.aitutor/`**: Local caching directory storing raw speech transcripts to prevent re-running Whisper ASR when modifying subtitle styles or adding languages.\r\n\r\n---\r\n\r\n## 9. USING GENERATED SUBTITLES\r\n\r\nOnce `npx aitutor` finishes, `<AITutor src=\"/lesson.mp4\" />` automatically detects pre-generated subtitles without requiring manual VTT imports:\r\n\r\n1. `<AITutor />` fetches `/aitutor/manifest.json`.\r\n2. It matches the video `src` or `id`.\r\n3. It loads the corresponding WebVTT track (e.g., `/aitutor/subtitles/lesson/en.vtt`).\r\n4. Subtitles display dynamically synced to video playback.\r\n\r\n---\r\n\r\n## 10. SELECTING SUBTITLE LANGUAGES & SHORTCUTS\r\n\r\nUsers can control subtitle display via the player UI controls or keyboard shortcuts:\r\n\r\n| Control / Shortcut | Action |\r\n| :--- | :--- |\r\n| **Subtitle Menu (`S`)** | Open/close language selection dropdown |\r\n| **Caption Toggle (`C`)** | Toggle subtitle visibility ON / OFF |\r\n| **Play / Pause (`Space` / `K`)** | Toggle video playback |\r\n| **Mute (`M`)** | Toggle audio mute |\r\n| **Fullscreen (`F`)** | Toggle full-screen mode |\r\n| **Seek Backward (`Left Arrow` / `J`)** | Seek backward 5 / 10 seconds |\r\n| **Seek Forward (`Right Arrow` / `L`)** | Seek forward 5 / 10 seconds |\r\n\r\n---\r\n\r\n## 11. LANGUAGE CAPABILITY MATRIX & REGISTRY\r\n\r\nAITutor provides a standardized multi-tier capability matrix across **109 global language definitions**. Registry presence is not marketed as verified production support; actual production capabilities strictly reflect verified evidence:\r\n\r\n| Capability | Supported Languages | Verification Status | Fallback / Notes |\r\n| :--- | :--- | :--- | :--- |\r\n| **Subtitle Transcription (ASR)** | All Whisper-supported languages (auto-detected) | Verified via Whisper neural ASR | Default English if undetected |\r\n| **Online Subtitle Translation** | **109 / 109 languages** | Production ready | Cloud translation providers |\r\n| **Offline Subtitle Translation** | **106 / 109 languages** | Production ready via local NLLB-200 | `bi`, `ch`, `doi` require online translation |\r\n| **Neural Audio Dubbing (TTS)** | **13 verified languages in registry** | Production verified real speech synthesis | Throws `AUDIO_NOT_AVAILABLE_FOR_LANGUAGE` if unsupported |\r\n\r\n### Language Registry Evidence Breakdown:\r\n- **109 Language Registry Definitions**: Standardized ISO-639-2/3, BCP-47 locales, and text direction metadata.\r\n- **13 Languages with Neural TTS Capability in Registry**: `en`, `hi`, `te`, `ta`, `bn`, `mr`, `gu`, `kn`, `ml`, `es`, `fr`, `de`, `ja`.\r\n- **95 Languages Unsupported / Unverified for Production TTS Claim**: Remaining registry entries lack verified neural voice mappings or verified production TTS synthesis.\r\n- **1 Partial Language Entry (`zh`)**: Subtitle translation tested, but lacks registered neural TTS voice mapping.\r\n\r\n> **Production Invariant**: AITutor **never claims** a language has audio dubbing support unless verified, genuine speech synthesis is functional for that locale. When TTS cannot generate real speech for a requested language, it raises an explicit `AUDIO_NOT_AVAILABLE_FOR_LANGUAGE` error rather than synthesizing flat tones, silence, or fake audio.\r\n\r\n<details>\r\n<summary><strong>Click to View Complete 109 Language Code Registry</strong></summary>\r\n\r\n| Code | Name | Native Name | Direction |\r\n| :--- | :--- | :--- | :--- |\r\n| `af` | Afrikaans | Afrikaans | ltr |\r\n| `sq` | Albanian | Shqip | ltr |\r\n| `am` | Amharic | አማርኛ | ltr |\r\n| `ar` | Arabic | العربية | rtl |\r\n| `hy` | Armenian | Հայերեն | ltr |\r\n| `as` | Assamese | অসমীয়া | ltr |\r\n| `az` | Azerbaijani | Azərbaycan | ltr |\r\n| `eu` | Basque | Euskara | ltr |\r\n| `be` | Belarusian | Беларуская | ltr |\r\n| `bn` | Bengali | বাংলা | ltr |\r\n| `bho` | Bhojpuri | भोजपुरी | ltr |\r\n| `bi` | Bislama | Bislama | ltr |\r\n| `bg` | Bulgarian | Български | ltr |\r\n| `my` | Burmese | မြန်မာဘာသာ | ltr |\r\n| `yue` | Cantonese | 廣東話 | ltr |\r\n| `ca` | Catalan | Català | ltr |\r\n| `ceb` | Cebuano | Cebuano | ltr |\r\n| `ch` | Chamorro | Chamorro | ltr |\r\n| `zh` | Chinese (Mandarin) | 中文 | ltr |\r\n| `hr` | Croatian | Hrvatski | ltr |\r\n| `cs` | Czech | Čeština | ltr |\r\n| `da` | Danish | Dansk | ltr |\r\n| `doi` | Dogri | डोगरी | ltr |\r\n| `nl` | Dutch | Nederlands | ltr |\r\n| `en` | English | English | ltr |\r\n| `et` | Estonian | Eesti | ltr |\r\n| `fj` | Fijian | Na Vosa Vakaviti | ltr |\r\n| `tl` | Filipino (Tagalog) | Tagalog | ltr |\r\n| `fi` | Finnish | Suomi | ltr |\r\n| `fr` | French | Français | ltr |\r\n| `gl` | Galician | Galego | ltr |\r\n| `ka` | Georgian | ქართული | ltr |\r\n| `de` | German | Deutsch | ltr |\r\n| `el` | Greek | Ελληνικά | ltr |\r\n| `kl` | Greenlandic | Kalaallisut | ltr |\r\n| `gu` | Gujarati | ગુજરાતી | ltr |\r\n| `ha` | Hausa | Hausa | ltr |\r\n| `haw` | Hawaiian | Ōlelo Hawaiʻi | ltr |\r\n| `he` | Hebrew | עברית | rtl |\r\n| `hi` | Hindi | हिन्दी | ltr |\r\n| `hu` | Hungarian | Magyar | ltr |\r\n| `is` | Icelandic | Íslenska | ltr |\r\n| `ig` | Igbo | Asụsụ Igbo | ltr |\r\n| `id` | Indonesian | Bahasa Indonesia | ltr |\r\n| `ga` | Irish | Gaeilge | ltr |\r\n| `it` | Italian | Italiano | ltr |\r\n| `ja` | Japanese | 日本語 | ltr |\r\n| `jv` | Javanese | Basa Jawa | ltr |\r\n| `kn` | Kannada | ಕನ್ನಡ | ltr |\r\n| `kk` | Kazakh | Қазақ тілі | ltr |\r\n| `km` | Khmer | ភាសាខ្មែរ | ltr |\r\n| `rw` | Kinyarwanda | Ikinyarwanda | ltr |\r\n| `ko` | Korean | 한국어 | ltr |\r\n| `ku` | Kurdish | Kurdî | ltr |\r\n| `ky` | Kyrgyz | Кыргызча | ltr |\r\n| `lo` | Lao | ພາສາລາວ | ltr |\r\n| `la` | Latin | Lingua Latina | ltr |\r\n| `lv` | Latvian | Latviešu | ltr |\r\n| `lt` | Lithuanian | Lietuvių | ltr |\r\n| `lb` | Luxembourgish | Lëtzebuergesch | ltr |\r\n| `mk` | Macedonian | Македонски | ltr |\r\n| `mg` | Malagasy | Malagasy | ltr |\r\n| `ms` | Malay | Bahasa Melayu | ltr |\r\n| `ml` | Malayalam | മലയാളം | ltr |\r\n| `mt` | Maltese | Malti | ltr |\r\n| `mi` | Maori | Te Reo Māori | ltr |\r\n| `mr` | Marathi | मराठी | ltr |\r\n| `mn` | Mongolian | Монгол | ltr |\r\n| `ne` | Nepali | नेपाली | ltr |\r\n| `no` | Norwegian | Norsk | ltr |\r\n| `ny` | Nyanja (Chichewa) | Chinyanja | ltr |\r\n| `or` | Odia (Oriya) | ଓଡ଼ିଆ | ltr |\r\n| `ps` | Pashto | پښتو | rtl |\r\n| `fa` | Persian | فارسی | rtl |\r\n| `pl` | Polish | Polski | ltr |\r\n| `pt` | Portuguese | Português | ltr |\r\n| `pa` | Punjabi | ਪੰਜਾਬੀ | ltr |\r\n| `ro` | Romanian | Română | ltr |\r\n| `ru` | Russian | Русский | ltr |\r\n| `sm` | Samoan | Gagana Samoa | ltr |\r\n| `gd` | Scottish Gaelic | Gàidhlig | ltr |\r\n| `sr` | Serbian | Српски | ltr |\r\n| `st` | Sesotho | Sesotho | ltr |\r\n| `sn` | Shona | chiShona | ltr |\r\n| `sd` | Sindhi | سنڌي | rtl |\r\n| `si` | Sinhala | සිංහල | ltr |\r\n| `sk` | Slovak | Slovenčina | ltr |\r\n| `sl` | Slovenian | Slovenščina | ltr |\r\n| `so` | Somali | Soomaali | ltr |\r\n| `es` | Spanish | Español | ltr |\r\n| `su` | Sundanese | Basa Sunda | ltr |\r\n| `sw` | Swahili | Kiswahili | ltr |\r\n| `sv` | Swedish | Svenska | ltr |\r\n| `tg` | Tajik | Тоҷикӣ | ltr |\r\n| `ta` | Tamil | தமிழ் | ltr |\r\n| `tt` | Tatar | Татар | ltr |\r\n| `te` | Telugu | తెలుగు | ltr |\r\n| `th` | Thai | ไทย | ltr |\r\n| `to` | Tongan | Faka Tonga | ltr |\r\n| `tr` | Turkish | Türkçe | ltr |\r\n| `tk` | Turkmen | Türkmençe | ltr |\r\n| `uk` | Ukrainian | Українська | ltr |\r\n| `ur` | Urdu | اردو | rtl |\r\n| `uz` | Uzbek | Oʻzbekcha | ltr |\r\n| `vi` | Vietnamese | Tiếng Việt | ltr |\r\n| `cy` | Welsh | Cymraeg | ltr |\r\n| `xh` | Xhosa | isiXhosa | ltr |\r\n| `zu` | Zulu | isiZulu | ltr |\r\n\r\n</details>\r\n\r\n---\r\n\r\n## 12. SUBTITLE SOURCE PRIORITY\r\n\r\nWhen multiple subtitle tracks exist for the same language, AITutor resolves tracks per language using a strict 4-tier priority order:\r\n\r\n```text\r\nHIGHEST  1. User Uploaded Subtitle   (Runtime UI user upload)\r\n         2. Developer Manual Track   (Passed via `subtitles` prop)\r\n         3. Generated Subtitle Track (From manifest.json)\r\nLOWEST   4. Demo Fallback Track      (Sample demonstration track)\r\n```\r\n\r\n### Resolution Example:\r\n- **Generated Tracks**: `en`, `es`, `te`\r\n- **Developer Manual Prop**: `subtitles={{ en: \"/custom-en.vtt\" }}`\r\n\r\n**Resolved Result**:\r\n- `en` → Developer Manual Track (`/custom-en.vtt`)\r\n- `es` → Generated Track (`/aitutor/subtitles/lesson/es.vtt`)\r\n- `te` → Generated Track (`/aitutor/subtitles/lesson/te.vtt`)\r\n\r\n---\r\n\r\n## 13. DEVELOPER SUBTITLE VISIBILITY & CUSTOM TRACKS\r\n\r\nControl subtitle track visibility and supply custom WebVTT files using the `subtitles` prop on `<AITutor />`:\r\n\r\n| Configuration | Behavior |\r\n| :--- | :--- |\r\n| **Omitted** | Show all available subtitle tracks (default) |\r\n| `\"all\"` | Show all available tracks |\r\n| `[\"en\", \"hi\", \"te\"]` | Only show those languages in player UI selector |\r\n| `{ en: \"/en.vtt\", hi: \"/hi.vtt\" }` | Use developer-provided custom VTT tracks |\r\n| `false` | Disable subtitle UI & cue rendering completely |\r\n\r\n### Examples\r\n\r\n```jsx\r\n// 1. Default Mode (shows all generated tracks for current video)\r\n<AITutor src=\"/lesson.mp4\" />\r\n\r\n// 2. Explicit All Mode\r\n<AITutor src=\"/lesson.mp4\" subtitles=\"all\" />\r\n\r\n// 3. Language Visibility Filter (UI menu only displays English, Hindi, Telugu)\r\n<AITutor src=\"/lesson.mp4\" subtitles={[\"en\", \"hi\", \"te\"]} />\r\n\r\n// 4. Custom Developer WebVTT Files (overrides generated tracks for specified languages)\r\n<AITutor\r\n  src=\"/lesson.mp4\"\r\n  subtitles={{\r\n    en: \"/subtitles/custom-en.vtt\",\r\n    te: \"/subtitles/custom-te.vtt\"\r\n  }}\r\n/>\r\n\r\n// 5. Disable Subtitle UI Completely\r\n<AITutor src=\"/lesson.mp4\" subtitles={false} />\r\n```\r\n\r\n---\r\n\r\n## 14. USER-UPLOADED SUBTITLES\r\n\r\nThe player UI includes a runtime subtitle upload button in the subtitle settings menu. Uploaded VTT/SRT files take the **highest priority** (Tier 1) for the current user session.\r\n\r\n---\r\n\r\n## 15. LOCAL VIDEOS\r\n\r\nSpecify relative paths to files located in your React `public/` directory:\r\n\r\n```jsx\r\n// Resolves to public/courses/react-101.mp4\r\n<AITutor src=\"/courses/react-101.mp4\" id=\"react_101\" />\r\n```\r\n\r\n---\r\n\r\n## 16. REMOTE VIDEO URLS\r\n\r\nAITutor supports direct remote HTTP/HTTPS video URLs:\r\n\r\n```jsx\r\n<AITutor src=\"https://cdn.example.com/videos/lesson1.mp4\" />\r\n```\r\n\r\n- **Authentication Tokens**: Ephemeral signed query parameters (`token=`, `signature=`, `expires=`) are automatically stripped during fingerprinting so signed URL updates do not cause unnecessary re-transcription.\r\n- **SSRF Protection**: Private IP ranges (`127.0.0.1`, `10.x.x.x`, `192.168.x.x`, `169.254.169.254`) and non-HTTP protocols (`file://`, `gopher://`) are blocked for security.\r\n\r\n---\r\n\r\n## 17. CACHE SYSTEM & MEDIA FINGERPRINT\r\n\r\nAITutor implements a content-aware media fingerprint:\r\n\r\n```text\r\nCanonical Path + File Size + mtimeMs + Sampled Binary Hash (Head 64KB + Mid 64KB + Tail 64KB)\r\n```\r\n\r\n- **Cache Hit**: Running `npx aitutor` on an unchanged file completes in `<1ms`, skipping audio extraction and speech-to-text.\r\n- **Performance**: Reading 192KB sampled chunks uses **<0.5ms** CPU time and **<200KB** RAM, making it safe for 1GB+ video files.\r\n\r\n---\r\n\r\n## 18. CHANGING A VIDEO\r\n\r\nIf you replace a video file (e.g. replacing `/public/lesson.mp4` with a new recording using the same filename):\r\n\r\n1. Run `npx aitutor`.\r\n2. AITutor detects that the media content fingerprint changed.\r\n3. Old transcripts and WebVTT tracks are invalidated and re-generated automatically.\r\n\r\nTo force re-generation manually:\r\n```bash\r\nnpx aitutor --force\r\n```\r\n\r\n---\r\n\r\n## 19. TRANSLATION MODES\r\n\r\nConfigure translation behavior in `aitutor.config.js`:\r\n\r\n```javascript\r\nexport default {\r\n  subtitles: {\r\n    translation: {\r\n      provider: 'auto' // 'auto' | 'online' | 'offline'\r\n    }\r\n  }\r\n};\r\n```\r\n\r\n- **`auto`**: Prefers online translation providers; falls back to local NLLB offline model if network is unavailable.\r\n- **`online`**: Online API translation.\r\n- **`offline`**: Pure local NLLB-200 translation running in Node.js via `@xenova/transformers`. (Downloads NLLB model files to local cache directory on first run).\r\n\r\n---\r\n\r\n## 20. CUSTOM TERMINOLOGY / GLOSSARY\r\n\r\nProtect brand names and technical jargon from being mis-translated:\r\n\r\n```javascript\r\n// aitutor.config.js\r\nexport default {\r\n  subtitles: {\r\n    glossary: [\r\n      'AITutor',\r\n      'React',\r\n      'Node.js',\r\n      'TypeScript',\r\n      'GraphQL'\r\n    ]\r\n  }\r\n};\r\n```\r\n\r\nProtected terms are preserved exactly as written during transcript normalization and multilingual translation.\r\n\r\n---\r\n\r\n## 21. CONFIGURATION REFERENCE (`aitutor.config.js`)\r\n\r\n```javascript\r\nexport default {\r\n  // Global subtitle settings\r\n  subtitles: {\r\n    languages: ['en', 'es', 'hi', 'te'], // Target language codes\r\n    quality: 'balanced',                 // 'fast' | 'balanced' | 'high'\r\n    glossary: ['React', 'AITutor'],      // Protected terms\r\n    transcription: {\r\n      model: 'Xenova/whisper-base'        // Whisper ASR model\r\n    },\r\n    translation: {\r\n      provider: 'auto'                   // 'auto' | 'online' | 'offline'\r\n    }\r\n  },\r\n\r\n  // Video list\r\n  videos: [\r\n    {\r\n      id: 'lesson_1',\r\n      src: './public/lesson.mp4',\r\n      languages: ['en', 'es', 'hi', 'te']\r\n    }\r\n  ]\r\n};\r\n```\r\n\r\n---\r\n\r\n## 22. CLI COMMAND REFERENCE\r\n\r\nExecute the CLI using `npx aitutor`:\r\n\r\n| Command | Scope & Capabilities | Required External / Optional Runtimes | Model Requirements | Network Required | Offline Possible |\r\n| :--- | :--- | :--- | :--- | :--- | :--- |\r\n| `npx aitutor init` | Base package: Generates `aitutor.config.mjs` and starter directory structure | None (Node.js only) | None | No | Yes |\r\n| `npx aitutor doctor` | Base package: Diagnoses environment, FFmpeg, Whisper provider, model caches | None (Runs inspection only) | None to run | No | Yes |\r\n| `npx aitutor status` | Base package: Inspects cached models, transcripts, audio dubs, and manifest entries | None | None | No | Yes |\r\n| `npx aitutor validate` | Base package: Audits generated WebVTT cue syntax and manifest integrity | None | None | No | Yes |\r\n| `npx aitutor clean` | Base package: Deletes generated subtitles, audio tracks, and manifests | None | None | No | Yes |\r\n| `npx aitutor setup` | Base package: Interactive environment setup wizard | Invokes system package managers (`winget`) and `npm` | Downloads requested models | Yes (if installing/downloading) | Yes (local check only) |\r\n| `npx aitutor generate` / `npx aitutor` | Full pipeline: Audio extraction, speech-to-text, translation, TTS dubbing, transcoding | **External system dependency**: FFmpeg/FFprobe<br>**Optional runtime**: `@huggingface/transformers` | **Cached model**: Whisper ASR (`whisper-tiny`), NLLB translation, TTS voice | Yes (for online API or model download)<br>No (if offline mode with cached models) | Yes (with cached models, optional runtime & system FFmpeg) |\r\n\r\n### Command Flags:\r\n- `--no-quality`: Skip video quality rendition transcoding during subtitle generation pipeline run.\r\n- `--force`: Ignore existing cache and force full re-transcription & translation.\r\n- `--keep-temp`: Retain temporary audio extraction workspace for debugging.\r\n- `--video <id>`: Target specific video ID for generation or cleanup.\r\n- `--audio-languages <langs>`: Filter or specify target audio dubbing languages (e.g. `--audio-languages en,hi,te`).\r\n- `--offline`: Strictly enforce offline execution; refuse cloud endpoints.\r\n- `--yes`, `-y`: Automatically confirm prompts in preflight remediation / setup.\r\n\r\n---\r\n\r\n## 23. DEVELOPMENT WORKFLOW\r\n\r\n```text\r\n1. Place video in public/ (e.g., public/lesson.mp4)\r\n         ↓\r\n2. Configure aitutor.config.js\r\n         ↓\r\n3. Run: npx aitutor\r\n         ↓\r\n4. Add <AITutor src=\"/lesson.mp4\" /> to React app\r\n         ↓\r\n5. Start dev server: npm run dev\r\n         ↓\r\n6. Test subtitle rendering & language switching\r\n         ↓\r\n7. Build production site: npm run build\r\n         ↓\r\n8. Deploy public/ & dist/ to static host\r\n```\r\n\r\n---\r\n\r\n## 24. PRODUCTION DEPLOYMENT\r\n\r\nEnsure your production build includes the generated static assets in `public/aitutor/`:\r\n\r\n```text\r\ndist/\r\n├── index.html\r\n├── assets/\r\n└── aitutor/\r\n    ├── manifest.json\r\n    └── subtitles/\r\n        └── lesson/\r\n            ├── en.vtt\r\n            └── ...\r\n```\r\n\r\n- When students view your application in production, their browser fetches pre-generated WebVTT files directly from static hosting.\r\n- FFmpeg and Whisper **do not** run in the browser.\r\n\r\n---\r\n\r\n## 25. DEPLOYMENT EXAMPLES & SERVING\r\n\r\n### Static Server Headers (Nginx / Vercel / Netlify / Cloudflare)\r\nEnsure `.vtt` files are served with the correct MIME type:\r\n\r\n```text\r\nContent-Type: text/vtt; charset=utf-8\r\nAccess-Control-Allow-Origin: *\r\n```\r\n\r\n---\r\n\r\n## 26. TROUBLESHOOTING\r\n\r\n| Problem | Cause | Solution |\r\n| :--- | :--- | :--- |\r\n| **Subtitles not appearing in browser** | `public/aitutor/manifest.json` missing | Run `npx aitutor` to generate manifest & WebVTT tracks. |\r\n| **Stale subtitles after changing video** | Same filename retained old cache | Run `npx aitutor` (media identity fingerprint auto-detects changes). Use `--force` if needed. |\r\n| **FFmpeg exited with error** | FFmpeg binary not found on PATH | Install FFmpeg globally or set `process.env.FFMPEG_PATH=\"C:\\\\path\\\\to\\\\ffmpeg.exe\"`. |\r\n| **Remote video 403 / CORS Error** | Remote server blocks cross-origin requests | Ensure remote video host sets `Access-Control-Allow-Origin: *`. |\r\n| **Offline translation missing language** | Language unsupported by NLLB offline model | `bi`, `ch`, and `doi` require `online` or `auto` translation mode. |\r\n\r\n---\r\n\r\n## 27. DEBUGGING SUBTITLE SOURCES\r\n\r\nYou can inspect resolved track sources at runtime using `resolveSubtitleSources`:\r\n\r\n```javascript\r\nimport { resolveSubtitleSources } from 'tavi-video-tutor';\r\n\r\nconst result = resolveSubtitleSources({\r\n  developerSubtitles: { en: '/custom-en.vtt' },\r\n  generatedSubtitles: { en: '/aitutor/subtitles/lesson/en.vtt', es: '/aitutor/subtitles/lesson/es.vtt' }\r\n});\r\n\r\nconsole.log(result.sourceByLanguage);\r\n// Output: { en: 'developer', es: 'generated' }\r\n```\r\n\r\n---\r\n\r\n## 28. ACCESSIBILITY & RTL SUPPORT\r\n\r\nAITutor includes native accessibility and internationalization support:\r\n- **Right-to-Left (RTL)**: Automatic text direction formatting for Arabic (`ar`), Hebrew (`he`), Persian (`fa`), Pashto (`ps`), Urdu (`ur`), and Sindhi (`sd`).\r\n- **Keyboard Navigation**: Complete player navigation via standard hotkeys (`Space`, `K`, `C`, `S`, `M`, `F`, Arrow keys).\r\n\r\n---\r\n\r\n## 29. PERFORMANCE\r\n\r\n- **ASR & Translation Caching**: Pre-calculated master transcripts prevent duplicate Whisper processing.\r\n- **Memory Footprint**: Stabilized memory consumption (**<6.5 MB heap**) during long playback and 500+ language switches.\r\n- **Sampled File Fingerprinting**: Fast 192KB chunk reads enable instant cache checks for large multi-gigabyte video files.\r\n\r\n---\r\n\r\n## 30. SECURITY & ZERO-TRUST VALIDATION\r\n\r\nAITutor enforces multi-layer enterprise security across network fetching, process execution, and media validation:\r\n\r\n### 🛡️ 1. Advanced SSRF Defense & DNS Rebinding Mitigation\r\n- **Protocol Enforcement**: Only `http:` and `https:` protocols are accepted. File schemes (`file://`), loopback abstractions, and esoteric schemes (`gopher://`, `dict://`) are rejected immediately.\r\n- **Private Subnet & Cloud Metadata Blocking**: All target IPs are resolved before connecting. Private IPv4 ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), loopback (`127.0.0.0/8`), link-local / cloud metadata services (`169.254.0.0/16`), and IPv6 equivalents (`::1`, `fc00::/7`, `fe80::/10`, IPv4-mapped IPv6 `::ffff:127.0.0.1`) are denied.\r\n- **DNS Rebinding Protection via Native IP Pinning**: A custom Node.js `http.Agent` / `https.Agent` lookup resolver pins outgoing TCP sockets directly to the pre-validated IP address, eliminating TOCTOU (Time-of-Check to Time-of-Use) DNS rebinding attacks while preserving standard TLS SNI handshakes and HTTP `Host` headers.\r\n- **Strict Redirect Validation**: Up to 5 redirects are permitted, with every intermediate URL re-evaluating hostname and resolved IP before following. Downgrading from HTTPS to plain HTTP is prohibited.\r\n- **Resource Exhaustion Guards**: Network media fetching enforces an explicit 30-second socket timeout and aborts any download exceeding the 2 GB maximum file limit.\r\n\r\n### 🔍 2. Zero-Trust Media Validation\r\n- **Video Rendition Integrity**: Every transcoded MP4 rendition is probed with FFprobe before registration in `manifest.json`. Renditions must contain valid `h264` video streams, `aac` audio streams, non-zero frame dimensions, and matching duration. Corrupted or invalid renditions are discarded and re-transcoded.\r\n- **Audio Dub Volumetric Speech Verification**: Generated and cached multilingual audio tracks are validated using the FFmpeg `volumedetect` filter. Files where `max_volume < -50 dB` or `mean_volume < -60 dB` are rejected with `SILENT_AUDIO`, preventing silent tracks or tone artifacts from reaching learners.\r\n- **Subtitle WebVTT Verification**: Subtitle files are verified for the `WEBVTT` header, timestamp syntax (`00:00:00.000 --> 00:00:02.000`), non-empty cues, target-script range checks, and exact match detection against source VTT. Stale or untranslated VTT files are rejected on both generation and cache lookup.\r\n\r\n### 🔒 3. Process Isolation & Token Sanitization\r\n- **Safe Argument Spawning**: FFmpeg, FFprobe, and external utilities execute via parameterized argument arrays in `child_process.spawn`. Shell interpretation is disabled (`shell: false`), preventing shell injection vulnerabilities.\r\n- **Sensitive Token Sanitization**: Ephemeral authentication tokens (`token=`, `sig=`, `expires=`) are stripped from remote media URLs prior to generating cache keys, preventing credential leakage in logs and persistent cache manifests.\r\n\r\n---\r\n\r\n## 31. API REFERENCE\r\n\r\n### `<AITutor />` Props\r\n| Prop | Type | Default | Description |\r\n|---|---|---|---|\r\n| `qualities` | `Array<{quality: string, src: string, height?: number, width?: number}>` | `undefined` | Optional explicit array of video quality renditions. If omitted, renditions are automatically populated from `manifest.json`. |\r\n| `onQualityChange` | `(quality: string) => void` | `undefined` | Optional callback triggered when user switches video quality. |\r\n\r\n| Prop | Type | Default | Description |\r\n| :--- | :--- | :--- | :--- |\r\n| **`src`** | `string` | *(Required)* | Video file path (`/lesson.mp4`) or remote URL (`https://...`) |\r\n| **`id`** | `string` | `undefined` | Optional explicit video identifier |\r\n| **`subtitles`** | `'all' \\| false \\| string[] \\| Record<string, string>` | `'all'` | Subtitle configuration & runtime visibility filter |\r\n| **`audioLanguages`** | `'all' \\| false \\| string[] \\| Record<string, string \\| AudioTrack>` | `'all'` | Audio dub configuration & runtime visibility filter |\r\n| **`defaultSubLanguage`** | `string` | `'en'` | Initial subtitle language code |\r\n| **`subLanguage`** | `string` | `undefined` | Controlled subtitle language state |\r\n| **`defaultAudioLanguage`** | `string` | `'original'` | Initial audio dub language |\r\n| **`playbackRates`** | `array` | `[0.5, 1, 1.25, 1.5, 2]` | Available playback speed options |\r\n| **`width`** | `string` | `'100%'` | Container width |\r\n| **`height`** | `string` | `'100%'` | Container height |\r\n| **`onPlay`** | `function` | `undefined` | Playback play event handler |\r\n| **`onPause`** | `function` | `undefined` | Playback pause event handler |\r\n| **`onEnded`** | `function` | `undefined` | Playback completion event handler |\r\n| **`onSubLanguageChange`** | `function` | `undefined` | Subtitle language change callback |\r\n| **`onAudioLanguageChange`** | `function` | `undefined` | Audio language change callback |\r\n\r\n---\r\n\r\n## 32. COMPLETE COPY-PASTE EXAMPLE\r\n\r\n### `aitutor.config.js`\r\n```javascript\r\nexport default {\r\n  subtitles: {\r\n    languages: ['en', 'es', 'hi', 'te'],\r\n    glossary: ['React', 'AITutor']\r\n  },\r\n  videos: [\r\n    {\r\n      id: 'demo_lesson',\r\n      src: './public/demo.mp4',\r\n      languages: ['en', 'es', 'hi', 'te']\r\n    }\r\n  ]\r\n};\r\n```\r\n\r\n### `src/App.jsx`\r\n```jsx\r\nimport React from 'react';\r\nimport { AITutor } from 'tavi-video-tutor';\r\nimport 'tavi-video-tutor/dist/style.css';\r\n\r\nexport default function App() {\r\n  return (\r\n    <div style={{ width: '100%', maxWidth: '960px', margin: '40px auto' }}>\r\n      <h1>React AI Tutor Lesson</h1>\r\n      <div style={{ width: '100%', aspectRatio: '16/9' }}>\r\n        <AITutor\r\n          src=\"/demo.mp4\"\r\n          id=\"demo_lesson\"\r\n          defaultSubLanguage=\"en\"\r\n          onSubLanguageChange={(lang) => console.log('Selected language:', lang)}\r\n        />\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n## 33. MULTILINGUAL AUDIO DUBBING (`audioLanguages`) — ARCHITECTURE, GENERATION & CLI GUIDE\r\n\r\nAITutor introduces an enterprise-grade, decoupled multilingual audio dubbing architecture where build-time generation, audio lifecycle management, and runtime player visibility are completely separated. Audio generation is powered by a multi-engine neural TTS registry, strict commercial vs. research policy controls, and an advanced `AudioTimelineEngine` guaranteeing pitch-preserved, zero-drift synchronization.\r\n\r\n---\r\n\r\n### 🎙️ 1. HOW AUDIO DUBS ARE GENERATED (PIPELINE DEEP DIVE)\r\n\r\nAudio generation in AITutor runs at build time via the CLI and follows an automated 7-step neural synchronization pipeline:\r\n\r\n```text\r\nSOURCE VIDEO (MP4/MKV/AVI/MOV/WebM)\r\n        ↓  [1. FFmpeg Stream Extraction]\r\nORIGINAL PCM WAV AUDIO (16kHz Mono)\r\n        ↓  [2. Whisper Neural Speech-to-Text]\r\nTIMESTAMPED CUE TRANSCRIPT (start, end, text)\r\n        ↓  [3. Neural Multilingual Translation + Glossary]\r\nTARGET LANGUAGE CUES (Localized text with preserved technical terms)\r\n        ↓  [4. Multi-Engine Neural TTS Synthesis (Piper / Kokoro / MMS / System Speech)]\r\nRAW AUDIO SEGMENTS (per cue, verified by PolicyEngine)\r\n        ↓  [5. AudioRateAdapter Pitch-Preserving Tempo Scaling (rubberband / atempo / aresample)]\r\nNORMALIZED SEGMENTS (clamped 0.5x - 2.0x, target cue duration aligned)\r\n        ↓  [6. AudioTimelineEngine & TimelineMixer Assembly]\r\npublic/aitutor/audio/<videoId>/<lang>.m4a (Overlap-resolved, zero drift ±10ms, AAC encoded)\r\n        ↓  [7. Manifest Registration]\r\npublic/aitutor/manifest.json (audioLanguages map with engine provenance)\r\n```\r\n\r\n#### Step-by-Step Generation Details:\r\n1. **Audio Extraction**: FFmpeg extracts the primary audio stream from local or remote video files as 16kHz mono PCM without re-encoding video tracks.\r\n2. **Speech-to-Text & Cue Alignment**: Whisper ASR models segment speech into millisecond-accurate cue blocks with precise start and end timestamps.\r\n3. **Multilingual Translation (`TranslationRouter`)**: Neural translation converts speech cues into target languages while preserving technical keywords defined in `aitutor.config.mjs` glossaries.\r\n4. **Multi-Engine Neural TTS Synthesis & Policy Gate (`TTSFactory` & `PolicyEngine`)**:\r\n   - Spoken audio is synthesized via the optimal engine resolved for each language:\r\n     - **Piper TTS**: Fast local neural speech across dozens of locales (`piper:<voice>`).\r\n     - **Kokoro TTS**: Ultra-high-fidelity neural 82M ONNX model (`kokoro:<voice>`).\r\n     - **Meta MMS**: Multilingual neural synthesis supporting 1,100+ languages (`mms:<voice>`).\r\n     - **NodeTTSProvider / System Speech**: Native OS voice synthesis (Windows OneCore/SAPI, macOS `say`, Linux `espeak-ng`) providing a 100% offline baseline requiring zero downloads.\r\n     - **Azure / Edge Cloud TTS**: High-end cloud neural speech when online restricted mode is permitted.\r\n   - **Policy Enforcement**: Before synthesis, `PolicyEngine` evaluates the model license against the active execution mode. In `COMMERCIAL` mode, non-commercial voices (e.g., Meta MMS under CC-BY-NC 4.0 or Albanian Lessac Blizzard lineage) are strictly blocked with structured `POLICY_RESTRICTION` errors.\r\n5. **Pitch-Preserving Time Alignment (`AudioRateAdapter`)**: If a translated spoken cue differs in duration from the original speech segment, `AudioRateAdapter` dynamically scales tempo (clamped between `0.5x` and `2.0x`) through a 3-tier filter ladder (`rubberband` native filter → FFmpeg `atempo` → `aresample` fallback). Voice pitch, formant characteristics, and natural cadence are completely preserved.\r\n6. **Timeline Scheduling & Mixing (`AudioTimelineEngine` & `TimelineMixer`)**:\r\n   - `AudioTimelineEngine` constructs an absolute millisecond timeline, inserting silence gaps between cues to match speech cadence.\r\n   - **Overlap Collision Prevention**: If translated speech overruns subsequent cues, `TimelineMixer` applies intelligent lookahead ducking and micro-truncation to prevent audio collisions.\r\n   - **Zero Drift Invariant**: Total track length is strictly clamped to match the source video length within $\\pm 10\\text{ms}$, guaranteeing perfect lip-sync and timing over long 60+ minute lectures.\r\n   - Final stitched audio is compressed into high-efficiency AAC (`.m4a`) or `.mp3`.\r\n7. **Manifest Update**: The track is registered in `public/aitutor/manifest.json` under `audioLanguages[lang]` with its native label, source URL, duration, and engine provenance metadata.\r\n\r\n---\r\n\r\n### 🗑️ 2. HOW AUDIO DUBS ARE REMOVED & CLEARED\r\n\r\nAITutor provides granular, non-destructive CLI commands to clear or remove generated audio tracks without affecting other media systems:\r\n\r\n```text\r\nnpx aitutor audio clear [languages] [--video <id>]\r\n```\r\n\r\n#### Removal Scope & Mechanics:\r\n1. **Single Language Removal** (`npx aitutor audio clear hi`):\r\n   - Deletes `public/aitutor/audio/<videoId>/hi.m4a` from disk.\r\n   - Removes the `hi` key from `audioLanguages` in `public/aitutor/manifest.json` and `.aitutor/manifest.json`.\r\n2. **Multi-Language Removal** (`npx aitutor audio clear hi,te`):\r\n   - Deletes all specified language audio files across videos.\r\n   - Cleans corresponding keys in the manifests simultaneously.\r\n3. **Video-Scoped Removal** (`npx aitutor audio clear --video lesson_1`):\r\n   - Deletes the entire directory `public/aitutor/audio/lesson_1/`.\r\n   - Clears `audioLanguages` for `lesson_1` while leaving other videos untouched.\r\n4. **Global Audio Clean** (`npx aitutor audio clear`):\r\n   - Deletes all generated audio files across all videos in `public/aitutor/audio/`.\r\n   - Resets `audioLanguages` in manifests to empty objects `{}`.\r\n\r\n#### 🛡️ Audio Clean Safety Invariants:\r\n- **Source Video Preservation**: Original source videos are **never modified or deleted**. The SHA-256 binary hash remains byte-identical.\r\n- **Subtitle & Quality Independence**: WebVTT subtitles (`.vtt`) and video quality renditions (`.mp4`) are **100% preserved**.\r\n- **Model Cache Retention**: Downloaded neural model weights in `.aitutor/cache/models/` are **never deleted** during audio clearing, avoiding expensive re-downloads.\r\n- **Instant UI Synchronization**: Cleared audio tracks immediately disappear from the player UI selector on next page load without throwing 404 errors.\r\n\r\n---\r\n\r\n### 📋 3. AUDIO CLI COMMAND REFERENCE TABLE\r\n\r\n| Command | Scope | Description | Practical Example |\r\n| :--- | :--- | :--- | :--- |\r\n| `npx aitutor generate --audio-languages all` | Global / Build | Batch generate audio dubs across all 109 language definitions with technical capability resolution | `npx aitutor generate --audio-languages all` |\r\n| `npx aitutor generate --audio-languages <langs>` | Targeted / Build | Generate audio dubs only for specified comma-separated languages | `npx aitutor generate --audio-languages en,hi,te` |\r\n| `npx aitutor generate --audio-languages <langs> --policy commercial` | Policy Enforced | Generate audio dubs strictly using commercially approved voice models | `npx aitutor generate --audio-languages en,hi --policy commercial` |\r\n| `npx aitutor generate --audio-languages <langs> --tts-engine <engine>` | Engine Specific | Force specific TTS synthesis engine (`piper`, `kokoro`, `mms`, `system`, `azure`, `edge`) | `npx aitutor generate --audio-languages en --tts-engine kokoro` |\r\n| `npx aitutor generate --audio-languages <lang> --force` | Targeted / Rebuild | Force re-transcription and re-synthesis, bypassing cache | `npx aitutor generate --audio-languages hi --force` |\r\n| `npx aitutor generate --video <id> --audio-languages <langs>` | Video Targeted | Generate audio dubs exclusively for a designated video ID | `npx aitutor generate --video lesson_1 --audio-languages hi,te` |\r\n| `npx aitutor generate --no-quality --audio-languages <langs>` | Fast Audio Build | Skip video quality transcoding and process only audio dubbing | `npx aitutor generate --no-quality --audio-languages hi,te` |\r\n| `npx aitutor audio status` | Inspection | Display generated audio tracks, cache status, engine provenance, and policy compliance | `npx aitutor audio status` |\r\n| `npx aitutor audio status --video <id>` | Targeted Inspection | Inspect audio status for a specific video ID | `npx aitutor audio status --video lesson_1` |\r\n| `npx aitutor audio clear <lang>` | Language Removal | Delete generated audio file and manifest entry for a single language | `npx aitutor audio clear hi` |\r\n| `npx aitutor audio clear <lang1>,<lang2>` | Multi-Language Removal | Delete generated audio for multiple languages across all videos | `npx aitutor audio clear hi,te` |\r\n| `npx aitutor audio clear <lang> --video <id>` | Targeted Video Removal | Delete specific language audio only for a designated video ID | `npx aitutor audio clear hi --video lesson_1` |\r\n| `npx aitutor audio clear --video <id>` | Video-Scoped Clear | Delete all generated audio tracks for a designated video ID | `npx aitutor audio clear --video lesson_1` |\r\n| `npx aitutor audio clear` | Global Clear | Delete all generated audio tracks across all videos in the project | `npx aitutor audio clear` |\r\n\r\n---\r\n\r\n### 💡 4. STEP-BY-STEP EXAMPLES FOR EVERY AUDIO COMMAND\r\n\r\n#### Example 1: Batch Audio Dub Processing Across Registry Languages\r\n```bash\r\nnpx aitutor generate --audio-languages all\r\n```\r\n- **When to use**: When generating dubs across all language registry definitions. AITutor evaluates technical capabilities per language (Piper, Kokoro, Meta MMS, or system speech) and synthesizes audio where verified neural models are available.\r\n- **What happens**: Transcribes video speech via Whisper, translates cues, synthesizes audio with verified voices, aligns timestamps with `AudioRateAdapter`, and outputs synchronized `.m4a` files into `public/aitutor/audio/<videoId>/<lang>.m4a`.\r\n- **Manifest**: Populates `public/aitutor/manifest.json` with generated language tracks.\r\n\r\n---\r\n\r\n#### Example 2: Generate Specific Target Languages\r\n```bash\r\nnpx aitutor generate --audio-languages en,hi,te,es\r\n```\r\n- **When to use**: When your course targets specific regions (e.g., English, Hindi, Telugu, and Spanish) to save build time and storage.\r\n- **Resulting Files**:\r\n  ```text\r\n  public/aitutor/audio/lesson_1/\r\n  ├── en.m4a\r\n  ├── hi.m4a\r\n  ├── te.m4a\r\n  └── es.m4a\r\n  ```\r\n\r\n---\r\n\r\n#### Example 3: Generate Audio for a Single Video Module\r\n```bash\r\nnpx aitutor generate --video lesson_1 --audio-languages hi,te\r\n```\r\n- **When to use**: When you added a new video `lesson_1` and only want to process dubbing for that specific lesson without touching existing videos.\r\n\r\n---\r\n\r\n#### Example 4: Force Re-Generation (Bypassing Cache)\r\n```bash\r\nnpx aitutor generate --audio-languages hi --force\r\n```\r\n- **When to use**: When you updated your glossary or terminology in `aitutor.config.mjs` and want to overwrite existing Hindi audio with fresh translations and synthesis.\r\n\r\n---\r\n\r\n#### Example 5: Fast Audio Build (Skip Video Transcoding)\r\n```bash\r\nnpx aitutor generate --no-quality --audio-languages en,hi,te\r\n```\r\n- **When to use**: When video quality ladders (1080p, 720p, etc.) are already generated, and you only want to quickly build or update audio dubs.\r\n\r\n---\r\n\r\n#### Example 6: Inspect Audio Track Status Across the Project\r\n```bash\r\nnpx aitutor audio status\r\n```\r\n- **Terminal Output Example**:\r\n  ```text\r\n  AITutor Audio Status\r\n  ───────────────────────────────────────────────────────────\r\n  lesson_1\r\n  Video:               ✓ Present\r\n  Source Language:     en (Original)\r\n  Generated Tracks:    3 track(s)\r\n\r\n  Audio Languages:\r\n    en       English (Source) [Cached] [Kokoro:af_bella]        -> /aitutor/audio/lesson_1/en.m4a\r\n    hi       हिन्दी           [Cached] [Piper:hi_IN-indic-med]  -> /aitutor/audio/lesson_1/hi.m4a\r\n    te       తెలుగు           [Cached] [MMS:facebook/mms-te]    -> /aitutor/audio/lesson_1/te.m4a\r\n\r\n  Policy Compliance:   Strict Commercial Clean (109 registry languages resolved)\r\n  ───────────────────────────────────────────────────────────\r\n  ```\r\n\r\n---\r\n\r\n#### Example 7: Inspect Audio Status for a Specific Video\r\n```bash\r\nnpx aitutor audio status --video lesson_1\r\n```\r\n- **When to use**: To quickly verify track presence, file paths, engine provenance, and cache status for a single module.\r\n\r\n---\r\n\r\n#### Example 8: Remove a Single Language Audio Dub\r\n```bash\r\nnpx aitutor audio clear hi\r\n```\r\n- **When to use**: When you want to remove the Hindi dub across all videos to re-generate or free storage.\r\n- **Behind the Scenes**:\r\n  - Deletes `public/aitutor/audio/<videoId>/hi.m4a`.\r\n  - Removes `\"hi\"` from `audioLanguages` in `public/aitutor/manifest.json`.\r\n  - Source video and subtitles remain 100% untouched.\r\n\r\n---\r\n\r\n#### Example 9: Remove Multiple Specific Language Audio Dubs\r\n```bash\r\nnpx aitutor audio clear hi,te\r\n```\r\n- **When to use**: To selectively remove Hindi and Telugu audio tracks while keeping other languages (e.g. Spanish, French) completely active.\r\n\r\n---\r\n\r\n#### Example 10: Remove Specific Language for a Designated Video\r\n```bash\r\nnpx aitutor audio clear hi --video lesson_1\r\n```\r\n- **When to use**: When you want to delete the Hindi dub specifically for `lesson_1` without affecting `lesson_2` or `lesson_3`.\r\n\r\n---\r\n\r\n#### Example 11: Clear All Generated Audio for a Single Video\r\n```bash\r\nnpx aitutor audio clear --video lesson_1\r\n```\r\n- **When to use**: To reset all audio tracks for `lesson_1` back to original source audio.\r\n- **Behind the Scenes**: Deletes `public/aitutor/audio/lesson_1/` and empties `audioLanguages` for `lesson_1` in `manifest.json`.\r\n\r\n---\r\n\r\n#### Example 12: Global Clean (Clear All Audio Dubs in Project)\r\n```bash\r\nnpx aitutor audio clear\r\n```\r\n- **When to use**: When you want to clear all generated audio dubs across the entire project.\r\n- **Behind the Scenes**: Empties `public/aitutor/audio/` and resets all `audioLanguages` entries in `manifest.json`. The player automatically reverts to native video audio.\r\n\r\n---\r\n\r\n#### Example 13: Policy-Aware Commercial Audio Dubbing\r\n```bash\r\nnpx aitutor generate --audio-languages hi,es,fr --policy commercial\r\n```\r\n- **When to use**: In commercial software products to guarantee 100% commercial-permissive voice licensing.\r\n- **What happens**: Restricts voice selection to commercial-clean models (e.g., Piper MIT/Apache voices or Kokoro Apache 2.0). Models with non-commercial upstream licenses (such as Meta MMS under CC-BY-NC 4.0 or Albanian Lessac Blizzard lineage) are rejected upfront with actionable diagnostic recommendations.\r\n\r\n---\r\n\r\n#### Example 14: Engine-Specific Neural Generation\r\n```bash\r\nnpx aitutor generate --audio-languages en,es --tts-engine kokoro\r\n```\r\n- **When to use**: When prioritizing ultra-high naturalness for languages supported by Kokoro ONNX neural models.\r\n\r\n---\r\n\r\n#### Example 15: Air-Gapped Offline Audio Generation\r\n```bash\r\nnpx aitutor generate --audio-languages en,hi --offline\r\n```\r\n- **When to use**: In secure, offline development or CI environments.\r\n- **What happens**: `NetworkGuard` enforces socket-level blocking. Synthesis uses locally cached Piper/Kokoro/MMS models or native OS system speech (Windows OneCore/SAPI, macOS `say`, Linux `espeak-ng`) with zero remote network requests.\r\n\r\n---\r\n\r\n### ⚙️ 5. RUNTIME AUDIO USAGE & REACT PROPS\r\n\r\n#### Automatic Original Language Detection (Zero Config):\r\nWhen the player mounts, it inspects `sourceLanguage` in the manifest and automatically exposes generated dubs while setting the source audio as `(Original)`:\r\n\r\n```jsx\r\n// Zero configuration: automatically defaults to video's original language (e.g. English)\r\n<AITutor src=\"/lesson.mp4\" />\r\n```\r\n\r\n#### Runtime Audio Filtering (`audioLanguages` Prop):\r\nFilter the options visible to the student in the player menu:\r\n```jsx\r\n// Shows only Hindi and Telugu dubs in the player menu (original audio is always protected)\r\n<AITutor \r\n  src=\"/lesson.mp4\" \r\n  audioLanguages={[\"hi\", \"te\"]} \r\n/>\r\n```\r\n\r\n#### Custom Developer Audio Tracks (`audioDubs`):\r\nProvide your own studio-recorded dubbing tracks to override AI generated audio:\r\n```jsx\r\n<AITutor\r\n  src=\"/lesson.mp4\"\r\n  audioDubs={{\r\n    hi: \"/custom-audio/lesson_hi.mp3\",\r\n    te: { label: \"Telugu Studio Dub\", src: \"/custom-audio/lesson_te.mp3\", language: \"te\" }\r\n  }}\r\n/>\r\n```\r\n\r\n#### Disabling Audio Dubbing:\r\n```jsx\r\n// Completely disables audio selector UI and plays native video audio\r\n<AITutor src=\"/lesson.mp4\" audioLanguages={false} />\r\n```\r\n\r\n#### Audio Language Change Events:\r\n```jsx\r\n<AITutor\r\n  src=\"/lesson.mp4\"\r\n  onAudioLanguageChange={(event) => {\r\n    console.log('Selected language:', event.language); // e.g. 'hi'\r\n    console.log('Previous language:', event.previousLanguage); // e.g. 'en'\r\n    console.log('Source:', event.source); // 'generated' | 'developer' | 'demo'\r\n  }}\r\n/>\r\n```\r\n\r\n#### Subpath Import for Audio Utilities:\r\n```javascript\r\nimport { resolveAudioAvailability, emitAudioDXWarning } from 'tavi-video-tutor/audio';\r\n```\r\n\r\n---\r\n\r\n### 🛡️ Audio Architecture Guarantees:\r\n- **Zero Audio Drift Invariant**: Total synthesized audio length is strictly clamped to match the source video length within $\\pm 10\\text{ms}$, preventing accumulated drift over hours of playback.\r\n- **Overlap Collision Prevention**: High-density dialogue is normalized via `AudioRateAdapter` and `TimelineMixer` micro-ducking, preventing adjacent speech segments from overlapping or distorting.\r\n- **Audio + Subtitle Independence**: Switching subtitle languages does not change the spoken audio track, and changing audio language does not modify subtitle display.\r\n- **Audio + Video Quality Independence**: Changing video resolution quality preserves active spoken audio dubbing track and playback synchronization seamlessly.\r\n- **Multi-Engine Provable Routing**: Strict provider ordering without silent fallback to unauthorized web scrapers or cloud APIs.\r\n- **Policy Enforcement Guarantee**: Commercial profile strictly gates all voice models, blocking non-commercial lineage models upfront.\r\n- **Zero-Network Offline Guarantee**: In `OFFLINE` mode, audio generation operates with 100% socket isolation using verified local models or OS speech engines.\r\n\r\n---\r\n\r\n## 34. MULTI-CONTAINER MEDIA INPUT SUPPORT (MP4, MKV, AVI, MOV, WebM)\r\n\r\nAITutor accepts multiple media container formats as input:\r\n- **`.mp4`** (MPEG-4 Part 14)\r\n- **`.mkv`** (Matroska Video)\r\n- **`.avi`** (Audio Video Interleave)\r\n- **`.mov`** (QuickTime Movie)\r\n- **`.webm`** (WebM Video)\r\n\r\n### How Multi-Container Normalization Works:\r\n1. **Stream-Aware Media Probing**: FFmpeg inspects actual video/audio streams, sample rates, channels, and rotation tags.\r\n2. **Canonical Processing**: Audio extraction, Whisper transcription, translation, and TTS dubbing execute identically regardless of container format.\r\n3. **Browser Normalization**: Non-browser native containers (e.g. `.avi`, `.mkv`, `.mov`, `.webm`) are automatically transcoded to browser-compatible H.264/AAC MP4 renditions stored in `/public/aitutor/videos/<id>/<height>.mp4`.\r\n4. **Source Preservation**: **Original source files are 100% preserved and never modified or overwritten.**\r\n\r\n```jsx\r\n// Works directly with MKV, AVI, MOV, or WebM sources:\r\n<AITutor src=\"/recording.mkv\" />\r\n```\r\n\r\n---\r\n\r\n## 35. UNIFIED MEDIA AVAILABILITY ARCHITECTURE\r\n\r\nAITutor standardizes Subtitles, Audio Languages, and Video Quality renditions under a unified, availability-first architectural flow:\r\n\r\n```text\r\nBUILD / GENERATED ASSETS\r\n        ↓\r\nMANIFEST / ACTUAL MEDIA DISCOVERY\r\n        ↓\r\nAVAILABILITY RESOLVER\r\n        ↓\r\nRUNTIME FILTER / OVERRIDE\r\n        ↓\r\nVISIBLE VALID OPTIONS\r\n        ↓\r\nPLAYER UI\r\n```\r\n\r\n### Core Architecture Invariant:\r\n> **The player MUST NEVER show an option merely because a developer requested it. An option is visible ONLY when a corresponding valid media asset actually exists.**\r\n\r\n---\r\n\r\n### 1. Unified Resolver Contract\r\n\r\nAll three media domains expose standardized availability resolvers returning a uniform contract shape:\r\n\r\n```typescript\r\ninterface MediaAvailabilityResult<T = any> {\r\n  enabled: boolean;                      // True if system is active and has visible options\r\n  hasAvailableItems: boolean;            // True if media assets exist before filtering\r\n  requestedItems: string[] | boolean | 'all'; // Requested developer filter configuration\r\n  availableItems: string[];              // All discovered media assets\r\n  visibleItems: string[];                // Valid intersection exposed to student UI\r\n  resolvedItems: T;                      // Domain-specific resolved metadata / tracks\r\n  sourceByItem: Record<string, string>;  // Priority source attribution per item\r\n  missingItems: string[];                // Requested items that do not exist on disk/manifest\r\n  reason: string;                        // Human-readable resolution status\r\n}\r\n```\r\n\r\n---\r\n\r\n### 2. The Three Unified Resolvers\r\n\r\n```javascript\r\nimport {\r\n  resolveSubtitleAvailability,\r\n  resolveAudioAvailability,\r\n  resolveQualityAvailability\r\n} from 'tavi-video-tutor';\r\n\r\n// Or via dedicated subpath exports:\r\nimport { resolveSubtitleAvailability } from 'tavi-video-tutor/subtitles';\r\nimport { resolveAudioAvailability } from 'tavi-video-tutor/audio';\r\nimport { resolveQualityAvailability } from 'tavi-video-tutor/quality';\r\n```\r\n\r\n---\r\n\r\n### 3. Domain Source Priority Rules\r\n\r\nEach media domain preserves its own domain-appropriate priority hierarchy:\r\n\r\n| Media Domain | Source Priority (Highest to Lowest) |\r\n| :--- | :--- |\r\n| **Subtitles** | `uploadedSubtitles` > `developerSubtitles` > `generatedSubtitles` (`manifest.json`) > `demoSubtitles` |\r\n| **Audio Languages** | `developerAudio` (`audioDubs`) > `generatedAudio` (`manifest.json`) > `originalTrack` (`sourceLanguage`) |\r\n| **Video Quality** | `hlsQualities` > `developerQualities` > `config.qualities` > `config.file.qualities` > `manifestQualities` > source stream |\r\n\r\n---\r\n\r\n### 4. Deduplicated Developer Experience (DX) Warnings\r\n\r\nWhen a developer requests media options (e.g. `subtitles={[\"en\", \"te\"]}`, `audioLanguages={[\"hi\", \"fr\"]}`, or `qualities={[\"1080p\", \"4K\"]}`) that do not exist in the manifest or storage, AITutor emits a deduplicated console warning in development mode (`process.env.NODE_ENV !== 'production'`) with the exact remediation command:\r\n\r\n```text\r\n[AITutor DX Warning]\r\nRequested video quality \"4K\" is not available.\r\n\r\nAvailable video qualities:\r\n\"1080p\", \"720p\", \"480p\"\r\n\r\nGenerate video qualities using:\r\n\r\nnpx aitutor generate --qualities all\r\n```\r\n\r\n---\r\n\r\n### 5. Explicit Disabling Modes\r\n\r\nEach media system can be completely disabled without affecting media playback or other subsystems:\r\n\r\n```jsx\r\n// Disable subtitles UI and WebVTT network fetching\r\n<AITutor src=\"/lesson.mp4\" subtitles={false} />\r\n\r\n// Disable audio language dubbing UI and play original video audio\r\n<AITutor src=\"/lesson.mp4\" audioLanguages={false} />\r\n\r\n// Disable quality selector UI and play source video stream\r\n<AITutor src=\"/lesson.mp4\" qualities={false} />\r\n```\r\n\r\n---\r\n\r\n### 6. Three-Way Playback State Independence\r\n\r\nSwitching between subtitles, audio languages, and video quality renditions is fully decoupled and maintains 100% state continuity:\r\n- **`currentTime`**: Preserved to exact floating-point second without rewind.\r\n- **`paused` / `playing`**: Playback state remains unchanged during rendition switches.\r\n- **`volume` & `muted`**: Synchronized across audio dub elements and main video canvas.\r\n- **`playbackRate`**: Playback rate (`0.5x` - `2.0x`) is preserved and re-applied immediately.\r\n\r\n---\r\n\r\n## 34. OPERATIONAL & PLATFORM REQUIREMENTS\r\n\r\nAITutor is designed for production media processing and requires the following minimum system and platform prerequisites:\r\n\r\n| Component | Minimum Requirement | Recommended | Purpose |\r\n| :--- | :--- | :--- | :--- |\r\n| **Node.js** | `>= 18.0.0` (LTS or current) | Node.js `20.x` or `22.x` | Runtime execution and CLI pipeline |\r\n| **FFmpeg** | `>= 5.0` with `libx264` and `aac` | FFmpeg `7.x` or `9.x` on system `PATH` | Audio extraction, volume analysis, multi-track mixing, rendition ladder |\r\n| **FFprobe** | Installed alongside FFmpeg | FFprobe on system `PATH` | Media container and stream probing |\r\n| **Memory (RAM)** | `>= 4 GB` available | `>= 8 GB` | Whisper ASR neural inference and multi-channel timeline mixing |\r\n| **Operating System** | macOS, Linux (Ubuntu/Debian/Alpine), Windows 10/11 | Any 64-bit OS | Cross-platform child-process execution |\r\n\r\n---\r\n\r\n## 35. PRODUCTION ERROR CODE REFERENCE\r\n\r\nWhen processing, validating, or synthesizing media assets, AITutor fails explicitly with strongly-typed error codes rather than silently producing corrupt or mock assets:\r\n\r\n| Error Code | Category | Cause / Description | Remediation |\r\n| :--- | :--- | :--- | :--- |\r\n| `SYNTHETIC_AUDIO_DISALLOWED` | Audio Security | Attempted to use synthetic/tone fallback in production mode | Ensure real TTS provider or real speech audio is supplied |\r\n| `AUDIO_NOT_AVAILABLE","readmeFilename":"README.md"}