PartCAD
The first package manager for CAD files
Žemaitukas — animated Samogitian Samoyed SVG character in TypeScript. Lip-syncs to translator audio; turns into a warrior of Perkūnas in dark mode.
Translation pending
DesignTypeScript · HTMLGitHub @bonsaivarasOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗An animatable SVG character written in TypeScript. In light mode it's a fluffy Samoyed wearing the colours of Samogitia (Žemaitija). In dark mode it becomes a storm-lit pagan warrior of Perkūnas (in Samogitia also called Dundulis). It moves its mouth in sync whenever a translator plays audio.
| Light mode, friendly | Dark mode, warrior |
|---|---|
Live demo: bonsaivaras.github.io/zemaitukas.
speak(text, { lang }): browser text-to-speech (Web Speech API)attachAudio(audioEl): any <audio> or <video> element, such as a translation service's outputattachStream(mediaStream): live audio, such as a WebRTC call or a microphonesetMouthOpen(0..1): drive the mouth yourself, for example from viseme dataimport { SamogitianSamoyed, LINES } from './src/samogitian-samoyed';
const dog = new SamogitianSamoyed(document.getElementById('stage')!, {
theme: 'auto', // follows <html data-theme>, <html class="dark"> and prefers-color-scheme
onSpeakStart: (text) => console.log(text),
});
dog.speak(LINES[dog.getMode()].lt, { lang: 'lt-LT' }); // Lithuanian
dog.attachAudio(document.querySelector('audio')!); // translator audio
dog.setTheme('dark'); // force warrior mode
| Method | What it does |
|---|---|
getMode() / setMode('friendly' | 'warrior') | Read or force the mode |
setTheme('auto' | 'light' | 'dark') | Theme source. Light gives friendly, dark gives warrior |
speak(text?, { lang, rate, pitch, voice }) | Speak with TTS and lip-sync. Returns a Promise |
stopSpeaking() | Cancel TTS |
attachAudio(el) / attachStream(stream, { monitor }) / detachAudio() | Lip-sync to audio |
setMouthOpen(v | null) | Manual mouth control. null releases it |
destroy() | Stop everything and remove the SVG |
crossOrigin="anonymous" on the media element. Without them the analyser hears silence.speak() or attachAudio() from a click or tap.npm install
npm run build # type-check, then bundle into dist/index.html
npm run preview # build and serve dist/
On every push to main, the included workflow (.github/workflows/pages.yml) builds the demo and publishes it to GitHub Pages. To turn it on, go to Settings → Pages → Source: GitHub Actions.
prompts/gemini-implementation-brief.md is a complete brief you can give Gemini, or any other coding model. It covers the rules, the spec, 15 known pitfalls, an acceptance checklist, and the full reference source.
MIT © Aivaras Bonckus