mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
OpenTitlecard는 TikTok 스타일 타이틀카드를 무료로 생성하는 오픈소스 도구입니다
OpenTitlecard: a free, open-source generator for TikTok-style titlecards. Color single words, reserve emoji slots, export a transparent PNG. Runs entirely in your browser.
디자인HTML · JavaScriptGitHub @wishym1shy온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기An open-source generator of titlecards in the style of famous social media platforms.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Open-source titlecards for social video. TikTok and Instagram-style titlecards as transparent PNGs, straight from your browser. No fussy plugins to install needed!
Type a line of text, color individual words, and export a transparent PNG with the familiar rounded-box look, ready to drop into Premiere Pro, After Effects, DaVinci Resolve, CapCut, or any editor that reads PNGs.
Unlike title-card tools built for TV episodes, movies or lower thirds, this one is made for short-form social video.
It's a single HTML file. There's nothing to install, nothing to build, and nothing is uploaded anywhere: everything runs locally in your browser.
Live app: https://wishym1shy.github.io/opentitlecard/
Paid plugins and MOGRTs can make this style of caption, but:
OpenTitlecard fixes each of those. Emoji are handled as an empty, correctly-sized slot so you can paste your own color emoji on top, and any word can have its own color.
g, y, p, q, j) or an emoji would crowd the bottom edge..ttf, .otf, .woff or .woff2 file for a client's brand font. A font file you load is remembered in your browser, so it's there next time, even if you move or delete the original. If a font isn't available (say, on another computer), a ⚠ in the family box says so and offers Reset to Inter (default).{name} in the export file name pattern, or click Name files after the cards, and every PNG is named after its card.{set}-{n}, so the PNGs and the ZIP are named after your set; ClientA-Vid{n}-TC style patterns work too, with first number and zero-padding), and downloads one transparent PNG per card in a single ZIP. Click any thumbnail to preview that card at full size and flip through the set with ← →. Cards share one style (font, colors, box) unless a card is given its own (◆); text, per-word color, italic and line nudges are always per card. Apply preset to all cards restyles the whole set (after asking you to confirm)..opntcd file named after the set, holding the text, per-word colors, italics, nudges and styles (it is plain JSON inside, readable in any text editor). In Chrome and Edge, the first Save asks where to put the file and later Saves update that same file, like a desktop app; other browsers download a new copy each time. Sets saved earlier as .json still open. New set (in the File menu, or the icon above the card list) starts over. Opening and New set ask before replacing cards you haven't saved (a fresh page doesn't ask). Nothing about your cards is kept in the browser. Double-clicking a .opntcd file doesn't open the app: open it from the app instead..json file from the ☰ File menu. Mark one as the default (★) and the app starts with it the first time it opens (before any settings are saved); after that your last-used settings come back, and Load returns to any preset.The version is shown next to the name at the top left; see CHANGELOG.md for what changed in each one.
The design controls are on the left: Text at the top (with the font family, weight and size), Presets at the bottom, and everything about the card's look in between under Titlecard Properties (Position, Text Position, Text Settings, Background, Emoji Slot), folded when the page opens. Cards, Canvas and Mock-up & safe zone float at the top right of the preview, and Export sits by itself at the bottom right: click a panel's title to minimize or expand it (every visit starts with only Cards open), or use Panels in the toolbar to hide them all and give the preview the whole width. The app remembers whether the panels are hidden.
Zoom and pan: Ctrl+scroll (⌘+scroll on a Mac, or pinch on a trackpad) zooms around the cursor; scroll to move around, Shift+scroll sideways, or drag with Space held or the middle mouse button. The zoom bar at the bottom-left of the preview has −/+, Fit and 100% (actual size); Ctrl+=, Ctrl+− and Ctrl+0 do the same. 100% shows one canvas pixel per screen pixel, so past that you see the real export pixels.
To see how a card will look on the real video, load a frame of the footage (or a screenshot of the feed) with Load image… under Mock-up background, at the top of the Mock-up & safe zone panel. It is drawn behind the card and fills the canvas the way the video would; Position X / Y, Scale and Opacity adjust it, and ↺ resets each one. Like the safe zone, it is only drawn on the preview: the PNG stays transparent. The settings are remembered; the image is kept until you reload the page. The safe zone can be shown on top of the mock-up, or either one on its own.
Turn on Show safe zone/overlay (under Safe zone & overlay) in the Mock-up & safe zone panel to see where a platform's interface covers your video. Stories and Reels (9:16) shade the interface bars red (250 px at the top and bottom of a 1080 × 1920 frame, plus the side buttons in Reels) and the safe zone green, and the bottom bar tells you whether the card in front is inside it or which part it runs into. Instagram Reels UI | iPhone 16 Pro draws the whole Reels screen instead (tabs, side buttons, creator and caption, navigation bar, the phone's rounded corners, Dynamic Island and home indicator, plus a grey "9x16 video" area: on iPhone the video fills the screen from the very top down to the navigation bar, so a little of each side is cropped, and the overlay tells you how much) at 1206 × 2622, the size of the iPhone 16 Pro canvas preset, so a mock-up background, your card and the interface together show the finished post. You can also load your own image (PNG, JPG, WebP or SVG) as the overlay. X / Y offset and Scale move and resize it, Opacity fades it; type a value, drag the field's icon, or double-click the icon to reset. The overlay is fitted to the canvas, so it matches exactly on 1080 × 1920 and 2160 × 3840. It is only drawn on the preview: it is never exported. The settings are remembered; a loaded image is kept until you reload the page.
index.html and open it in Chrome or Edge.Tip: if you want the card sized by the editor instead of the canvas, use Tight crop and scale the PNG in your editor.
The default font is Inter (Bold), a free, open-source typeface (SIL Open Font License 1.1) that works well for this style. Four more open-source families ship with it: Montserrat (a geometric sans), Linik Sans (a wide, friendly sans based on Inter), Source Serif 4 and Playfair Display (two serifs). Each comes with real upright and italic faces and every weight, and they are embedded in index.html (Latin alphabet), so the app looks right on any computer with nothing to install and nothing downloaded. The app always uses its own copy of these for the Latin alphabet, so a card looks and exports the same on every computer, and an installed copy of the same font only fills in characters the bundled one doesn't have (other alphabets).
To use another font:
.ttf, .otf, .woff, .woff2). Pick all the files of a typeface at once (Regular, Bold, Italic…): OpenTitlecard reads each file's family, weight and italic, so they become one family with a working Weight menu and a real italic. For .woff2 files (which a browser can't read inside) it guesses these from the file name and asks you to check them.If the selected family isn't available, the app shows a warning and renders with a fallback font, so you know the export won't match the intended look.
The bundled fonts are open source and free to use commercially and non-commercially, and the app never uploads fonts. Their copyright notices and license are kept next to the embedded fonts in index.html and in THIRD_PARTY_LICENSES.md. If you fork OpenTitlecard to make something commercial, check the licenses of what you ship yourself.
Use a Chromium browser (Chrome, Edge, Brave, Arc) for the full experience. The app relies on the Canvas API with letter-spacing, Intl.Segmenter, and (optionally) the Local Font Access API and EyeDropper API. Firefox and Safari may work for basic use but are not tested.
Everything happens in your browser. No text, fonts, or images leave your computer. The one thing the app fetches is its own page, now and then, to see whether a newer version is out; it sends nothing about you or your work, and when there is one, a green Update available pill appears next to the version number. Click it to reload. (Opened as a local file, it never checks.) Your last style settings, custom palette colors, saved presets, your export file-name pattern are stored in your browser's localStorage and nowhere else. Font files you load are kept in your browser's IndexedDB on this computer, so they come back next time; Forget them under the font buttons removes them. Your cards and their text are not stored: they exist only on the page until you save them to a file you choose. The undo history is kept in memory too, and is gone when you close or reload the page. Mock-up and safe zone images you load stay in memory for the session only.
To clear what the app keeps, use the ☰ File menu. Soft reset… puts the settings back to how the app first opens (the card's look, canvas size, overlay, mock-up, export naming, panels and auto-scale) and keeps your presets, palette colors and remembered fonts. Reset all… deletes everything, presets and remembered fonts included. Both say exactly what they clear before you confirm, and both clear the cards on the page, so save the set first.
The app itself has no build step and no runtime dependencies: it's just index.html. Node is only needed to run the tests.
# run the app: open index.html, or serve the folder
python3 -m http.server 8000
# run the tests (Playwright + Chromium)
npm ci
npx playwright install chromium
npm test
The tests load a pinned open-source font (Inter, via @fontsource/inter) through the app's own Load font file… feature, so results are identical on any machine. GitHub Actions runs the same suite on every pull request and on every push to main.
The page exposes a small hook for tests, window.__tt, with the state (S), the last layout (L), render()/renderNow(), exportGeometry() and draw(), plus the batch helpers (cards, active, batchNames(), buildZip(), crc32()).
Contributions are welcome. Open an issue first for anything big. All changes land through pull requests that the maintainer reviews and merges, and CI must pass.
This is an independent project. It isn't affiliated with, endorsed by, or sponsored by TikTok, ByteDance, or Adobe. "TikTok" and "Adobe" are trademarks of their respective owners and are used here only to describe compatibility and the style being recreated.