UNPKG

imgtotext

Version:

ImgToText is a concise library that converts any image/video into customizable text!

2 lines 3.58 kB
#!/usr/bin/env node import{exec,spawn}from"child_process";import{mkdirSync,writeFileSync}from"fs";import{join}from"path";import{createInterface}from"readline";const destination=join(process.cwd(),process.argv[2]||"");try{mkdirSync(destination,{recursive:!0})}catch{}writeFileSync(join(destination,"index.html"),'<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>Template</title>\n <link rel="stylesheet" href="index.css">\n</head>\n<body>\n\n <div id="generatedText" autocomplete="off" spellcheck="false"></div>\n\n <div class="settings">\n <label>Use colors:<input id="useColors" type="checkbox"></input></label>\n <button id="copyResult">Copy Text Result</button>\n <button id="inputCamera">Camera</button>\n <input type="file" id="mediaInput">\n </div>\n\n <script src="index.js" type="module" async><\/script>\n</body>\n</html>'),writeFileSync(join(destination,"index.css"),"html, body {\n background-color: black;\n overflow: overlay;\n color: aliceblue;\n margin: 0;\n font-size: 16px;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n#generatedText {\n height: 95%;\n width: 100%;\n background-color: transparent;\n color: aliceblue;\n outline: none;\n border: none;\n font-family: monospace;\n font-size: 16px;\n letter-spacing: 0px;\n line-height: 18px;\n white-space: pre;\n}\n\n.settings {\n position: fixed;\n bottom: 3vh;\n}"),writeFileSync(join(destination,"index.js"),'import {ImageToTextConverter} from "imgtotext"\nimport {ImageDisplay} from "cdejs"\n\n// Warning message\nif (location.origin.startsWith("http:")) console.warn("Make sure that this page is hosted on a trusted source (https:// or file://) for the camera and text copy to work!")\n\n// ImageToTextConverter instance\nconst converter = new ImageToTextConverter((text)=>{generatedText.innerHTML = text}, null, 3, [" ",".",":","-","~","=","+","o","O","X","H","M"])\n\n// Some default text\nconverter.createBigText("Img\\nTo\\nText :D", "32px monospace", [2, 1.25], "aqua")\n\n// Custom file input\nconverter.createHTMLFileInput(mediaInput)\n\n// Camera capture input\ninputCamera.onclick=()=>{\n converter.loadMedia(ImageDisplay.loadCamera())\n mediaInput.value = ""\n}\n\nuseColors.oninput=(e)=>{\n converter.useColors = e.target.checked\n converter.generate()\n}\n\n// Copy text result\ncopyResult.onclick=()=>{\n if (navigator.clipboard) navigator.clipboard.writeText(generatedText.innerHTML.trimEnd())\n}'),writeFileSync(join(destination,".gitignore"),"node_modules\ndist"),writeFileSync(join(destination,"package.json"),'{\n "name": "template",\n "version": "1.0.0",\n "main": "index.js",\n "type": "module",\n "scripts": {\n "dev": "vite"\n },\n "dependencies": {\n "imgtotext": "^1.2.3"\n },\n "devDependencies": {\n "vite": "^6.2.2"\n }\n }'),spawn("npm",["i"],{cwd:destination,shell:!0}),console.log("Project template successfully created at '"+destination+"'!\n");const cli=createInterface({input:process.stdin,output:process.stdout});function close(e){e.close(),console.log("")}cli.question("Open in explorer [Y/N]? ",e=>{const n=e?.toLowerCase()?.trim();"code"==n?exec("code --new-window "+destination):n&&!["y","yes","ye","ok"].includes(n)||exec("explorer "+destination),close(cli)}),process.stdin.on("keypress",(e,n)=>{"escape"==n.name&&close(cli)});