mesh-avatar-studio
Turn one illustration into an animated 2D mesh avatar with a coding agent and a local editor
Convert typed text into realistic handwritten pages, with AI-assisted assignments.
DesignJavaScript · HTMLGitHub @CodewithWitcherOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Turn typed text into realistic handwritten pages and full assignments: auto-filled university front pages, AI-written answers (Claude, DeepSeek, OpenAI, Gemini or no API key), templates and one-click PDF. Runs in your browser. Your data stays on your device.
Taken from the repository README
Loading the full README.
Read the full README ↗Turn typed text into realistic handwritten pages, or build a complete handwritten assignment, with a filled-in front page and AI-drafted answers. Everything runs in your browser, and your data stays on your device.
Maintained by CodewithWitcher. Contributions are welcome. See CONTRIBUTING.md.
| Option | How | Best for |
|---|---|---|
| Online | Open https://codewithwitcher.github.io/Text-To-Handwritten-With-AI/ | Trying it out, nothing to install |
| One command (Python) | pipx run text-to-handwriting-ai or uvx text-to-handwriting-ai (Python 3.8+) | Every AI provider, fully on your machine |
| One command (Node) | npx text-to-handwriting-ai (Node.js 18+) | Same, if you have Node instead of Python |
| From source | Clone the repo, then npm start or python3 server.py | Contributing |
Your data stays in your browser in every option. The online version calls AI providers straight from your browser. Claude and DeepSeek allow that, but some providers block it (CORS). If a provider fails online, use one of the one-command options: they run a small local relay that works with all of them.
Use the switch at the top of the page.
The original quick converter. Type or paste text, choose a font, ink and paper, then generate images or a PDF.
A guided, four-step flow that produces a complete assignment PDF.
Pick an assessment template: Q&A, short answers, detailed answers, essay, lab report, case study, or your own. Choose a font (QE Dave Mergens by default) or upload your own .ttf. Then set ink colours for answers and headings, heading style, ruled lines, margin, and natural variation (a small per-word tilt so it doesn't look like a font). The live preview updates as you change things.
Upload your university or college front page as an image or PDF.
__ / __ / ____ slots and addresses that need two lines.Choose where the questions come from:
Then generate the answers with AI. Answer length follows the marks and the template, and you can edit, regenerate or reorder anything. No API key? Click Copy prompt, paste it into ChatGPT, Claude.ai or DeepSeek, paste the reply back, and click Import answers.
Text flows across A4 pages: words are never cut, and headings are never left alone at the bottom of a page. Edit the final text if you like, then download one PDF (front page first) or the individual page images.
My Profile stores your name, roll number, programme and other details in this browser, plus My Courses for each subject you write assignments for. To fill it from a file, click Download profile template, fill in the JSON in any text editor, then click Import profile.
AI Settings supports Claude, DeepSeek, OpenAI, Google Gemini, OpenRouter, Groq, Ollama (local, no key) and any OpenAI-compatible endpoint. Keys stay in your browser.
Dark mode is included:
One command, no clone. Use whichever you have:
pipx run text-to-handwriting-ai # Python (pipx)
uvx text-to-handwriting-ai # Python (uv)
npx text-to-handwriting-ai # Node.js
Each one opens http://127.0.0.1:8080 in your browser. Options: --port 9000, --no-open, --host 0.0.0.0 (to reach it from other devices on your network).
To keep it installed instead: pip install text-to-handwriting-ai, then run text-to-handwriting-ai.
From a clone (no dependencies needed to run):
npm start # Node 18+
python3 server.py # or Python 3.8+, same behaviour
Both serve the app and relay AI requests to the provider you choose, so browsers don't block them (CORS). If the port is busy, the next free one is used.
macOS: port 5000 is taken by AirPlay Receiver, which is why the default is 8080.
Own content and the final text step use this formatting:
| Write | Result |
|---|---|
# Title | Centered title |
## Heading | Question / section heading |
### Sub-heading | Sub-heading |
- item / 1. item | Bullet / numbered list |
**text** | Underlined emphasis |
| blank line | New paragraph |
--- | New page |
index.html Page shell: Classic markup + Advanced markup
bin/cli.mjs `npx text-to-handwriting-ai` launcher (Node, no deps)
text_to_handwriting_ai/ Same server + AI relay in Python (stdlib only); the pip package
server.py Runs the Python server from a clone
pyproject.toml pip package definition (bundles the site files at build time)
docs/screenshots/ Images used in this README
js/app.mjs Classic mode (original behaviour)
js/mode-switch.mjs Classic / Advanced switch (lazy-loads Advanced)
js/config.mjs Repository / author links
js/advanced/
main.mjs Advanced mode controller (tabs, steps)
llm.mjs AI providers (Claude SDK + OpenAI-compatible)
questions.mjs Question extraction (AI and rule-based)
templates.mjs Templates, prompts, document composition
renderer.mjs Pagination + handwriting page rendering
frontpage.mjs Front page detection / editor
pdf-input.mjs PDF text extraction + OCR
profile.mjs, store.mjs, output.mjs, ui.mjs, loaders.mjs
css/advanced.css Advanced mode styles
npm test, with the server running)Bug reports, front-page layouts that don't detect well, new templates and fixes are all welcome. Read CONTRIBUTING.md to get set up, and follow our Code of Conduct. To report a security problem, see SECURITY.md.
Use this for notes, practice, accessibility (for example, if handwriting is hard for you) and mock-ups. Check your institution's rules before submitting AI-assisted or generated work.
MIT. See LICENSE. Based on the MIT-licensed text-to-handwriting project.