๐Ÿ”ค Image to Hebrew Font + โœ๏ธ Font Editor

February 9, 2026 ยท View on GitHub

๐Ÿ”ค Image to Hebrew Font + โœ๏ธ Font Editor

ืกื˜ ื›ืœื™ื ืžืœื ืœื™ืฆื™ืจื” ื•ืขืจื™ื›ื” ืฉืœ ืคื•ื ื˜ื™ื ืขื‘ืจื™ื™ื

๐ŸŒ ืืชืจ ื”ืคืจื•ื™ืงื˜

ืฉื ื™ ื›ืœื™ื ืžืฉืœื™ืžื™ื:

  1. Font Generator โ€” ื™ื•ืฆืจ ืคื•ื ื˜ TTF ืžืชืžื•ื ืช AI: ื–ื™ื”ื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืื•ืชื™ื•ืช, ืฉื™ื•ืš, ื›ื•ื•ื ื•ืŸ ื•ื™ืฆื™ืจืช ืงื•ื‘ืฅ TTF
  2. Font Editor โ€” ืขื•ืจืš ื•ื™ื–ื•ืืœื™ ืœืงื‘ืฆื™ TTF: ืขืจื™ื›ืช ื ืงื•ื“ื•ืช, ืฆื™ื•ืจ ืงื•ื ื˜ื•ืจื™ื, ื™ื™ื‘ื•ื SVG, ื™ื™ืฆื•ื WOFF/WOFF2, ืขืจื™ื›ืช kerning ื•ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื—ื™ื”

๐Ÿš€ ื”ืชืงื ื” ื•ื”ืคืขืœื”

ื“ืจื™ืฉื•ืช ืžื•ืงื“ืžื•ืช

  • Python 3.8 ื•ืžืขืœื”
  • Windows (ื ื‘ื“ืง ืขืœ Windows 10/11)

ื”ืชืงื ื”

# 1. ืฉื›ืคื•ืœ ื”ืจื™ืคื•
git clone https://github.com/UberStorm/Image-To-Hebrew-Font-Generator.git
cd Image-To-Hebrew-Font-Generator

# 2. ื”ืชืงื ื” (ื™ื•ืฆืจ venv ืื•ื˜ื•ืžื˜ื™ืช ื•ืžืชืงื™ืŸ ื—ื‘ื™ืœื•ืช)
install.bat

ื”ืคืขืœื”

# ื™ื•ืฆืจ ืคื•ื ื˜ื™ื ืžืชืžื•ื ื” โ€” ื ืคืชื— ื‘-http://127.0.0.1:5000
run.bat

# ืขื•ืจืš ืคื•ื ื˜ื™ื ื•ื™ื–ื•ืืœื™ โ€” ื ืคืชื— ื‘-http://127.0.0.1:5001
run_fonteditor.bat

ื ื™ืชืŸ ืœื”ืจื™ืฅ ืืช ืฉื ื™ื”ื ื‘ืžืงื‘ื™ืœ.


๐Ÿ”ค Font Generator โ€” ื™ืฆื™ืจืช ืคื•ื ื˜ ืžืชืžื•ื ื”

๐Ÿ“ธ ืฆื™ืœื•ืžื™ ืžืกืš

ื”ืขืœืืช ืชืžื•ื ื” ื•ื–ื™ื”ื•ื™ืฉื™ื•ืš ืื•ืชื™ื•ืช ื•ื›ื•ื•ื ื•ืŸืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื•ื™ืฆื™ืจืช ืคื•ื ื˜
Generator 1Generator 2Generator 3

โœจ ืชื›ื•ื ื•ืช

ื–ื™ื”ื•ื™ ื•ืกืงื™ืจื”

  • ื–ื™ื”ื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืื•ืชื™ื•ืช โ€” ืžืขืœื™ื ืชืžื•ื ื” ื•ื”ืžืขืจื›ืช ืžื–ื”ื” ืืช ื›ืœ ื”ืฆื•ืจื•ืช ื‘ื ืคืจื“
  • ืจืžืช ื”ืคืจื“ื” ืžืชื›ื•ื•ื ืช (0โ€“5) โ€” ื‘ืงืจื” ืขืœ ืขื•ืฆืžืช ื”ื”ืคืจื“ื” ื‘ื™ืŸ ืื•ืชื™ื•ืช ืฆืคื•ืคื•ืช
  • ืกืงื™ืจืช ื–ื™ื”ื•ื™ื™ื ื•ื™ื–ื•ืืœื™ืช โ€” ืชืฆื•ื’ืช Canvas ืขื ืžืœื‘ื ื™ื; ื’ืจื™ืจื” ืœื”ื•ืกืคืช ื–ื™ื”ื•ื™ ื—ืกืจ, ืœื—ื™ืฆื” ืœืžื—ื™ืงื”
  • ื–ื™ื”ื•ื™ ืžื—ื“ืฉ โ€” ื›ืคืชื•ืจ re-detect ืขื ืฉืœื™ื˜ื” ืขืœ ืจืžืช ื”ื”ืคืจื“ื” ื™ืฉื™ืจื•ืช ืžื”ืกืงื™ืจื”

ืฉื™ื•ืš ืื•ืชื™ื•ืช

  • ืฉื™ื•ืš ื‘ืžืงืœื“ืช โ€” ืœื—ื™ืฆื” ืขืœ ื›ืจื˜ื™ืก + ื”ืงืœื“ืช ืื•ืช = ืฉื™ื•ืš ืžื™ื™ื“ื™ ืขื ืžืขื‘ืจ ืื•ื˜ื•ืžื˜ื™
  • ืžื™ื–ื•ื’ ื•ืคื™ืฆื•ืœ โ€” ืžื™ื–ื•ื’ ืฆื•ืจื•ืช ืฉื–ื•ื”ื• ื‘ื ืคืจื“ (ื›ืžื• ื ืงื•ื“ื” + ื’ื•ืฃ ืฉืœ ! ืื• ?) ื•ืคื™ืฆื•ืœ ืฆื•ืจื•ืช ืžื•ืจื›ื‘ื•ืช

ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื•ื›ื•ื•ื ื•ืŸ

  • ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื—ื™ื” โ€” ื”ืงืœื“ืช ื˜ืงืกื˜ ื•ืชืฆื•ื’ื” ืžื™ื™ื“ื™ืช ืฉืœ ืื™ืš ื”ืคื•ื ื˜ ื™ื™ืจืื”
  • ื›ื•ื•ื ื•ืŸ ืœื›ืœ ืื•ืช โ€” ื’ื•ื“ืœ (Scale), ื”ื–ื–ื” ืื ื›ื™ืช/ืื•ืคืงื™ืช, ืจื™ื•ื•ื— (Spacing)
  • ื›ื•ื•ื ื•ืŸ ื’ืœื•ื‘ืœื™ โ€” ื”ื—ืœืช ื”ื’ื“ืจื•ืช ืขืœ ื›ืœ ื”ืื•ืชื™ื•ืช ื‘ืœื—ื™ืฆื” ืื—ืช
  • ื’ื“ืœื™ื ืคืจื•ืคื•ืจืฆื™ื•ื ืœื™ื™ื โ€” ืื•ืชื™ื•ืช ืงื˜ื ื•ืช ื ืฉืืจื•ืช ืงื˜ื ื•ืช ื™ื—ืกื™ืช ืœื’ื“ื•ืœื•ืช, ื›ืžื• ื‘ืคื•ื ื˜ ืืžื™ืชื™

ื™ืฆื™ืจืช ืคื•ื ื˜

  • ืขืงื•ืžื•ืช Bรฉzier ื—ืœืงื•ืช โ€” ืขืงื•ืžื•ืช ืงื•ื•ืื“ืจื˜ื™ื•ืช ืœืชื•ืฆืื” ืžืงืฆื•ืขื™ืช
  • ืชืžื™ื›ื” ื‘ื—ื•ืจื™ื โ€” ืื•ืชื™ื•ืช ื›ืžื• ื‘, ื“, ื”, ื, ืก ืฉื•ืžืจื•ืช ืขืœ ื”ื—ืœืœื™ื ื”ืคื ื™ืžื™ื™ื
  • ืื•ืชื™ื•ืช ืกื•ืคื™ื•ืช ืขื descenders โ€” ืš, ืŸ, ืฃ, ืฅ, ืง โ€” ื™ืจื™ื“ื” ืื•ื˜ื•ืžื˜ื™ืช ืžืชื—ืช ืœืงื• ื”ื‘ืกื™ืก
  • ืชื•ื•ื™ื ื ืคื•ืฆื™ื ืž-Arial โ€” ~46 ืชื•ื•ื™ื (ืกืคืจื•ืช, ืคื™ืกื•ืง, ืกื•ื’ืจื™ื™ื) ืžื•ื–ืจืงื™ื ืื•ื˜ื•ืžื˜ื™ืช
  • ืžื˜ื-ื“ืื˜ื” โ€” ืฉื ื™ื•ืฆืจ, ืชื™ืื•ืจ, ื’ืจืกื”, ืจื™ืฉื™ื•ืŸ, ืืชืจ (ืื•ืคืฆื™ื•ื ืœื™)

ืฉืžื™ืจื” ื•ื˜ืขื™ื ืช ืคืจื•ื™ืงื˜

  • ื™ื™ืฆื•ื/ื™ื™ื‘ื•ื ืคืจื•ื™ืงื˜ (.hfm) โ€” ืฉืžื™ืจืช ื›ืœ ืžืฆื‘ ื”ืขื‘ื•ื“ื” ืœืงื•ื‘ืฅ ืขืฆืžืื™: ืชืžื•ื ื”, ื–ื™ื”ื•ื™ื™ื, ืฉื™ื•ื›ื™ื, ื›ื•ื•ื ื•ื ื™ื, ืžื˜ื-ื“ืื˜ื”

๐Ÿ“– ืฉืœื‘ื™ ืขื‘ื•ื“ื”

ืฉืœื‘ืชื™ืื•ืจ
1 โ€” ื”ืขืœืืช ืชืžื•ื ื”ื”ืขืœืืช ืชืžื•ื ื” ืขื ืื•ืชื™ื•ืช (ืื• ื˜ืขื™ื ืช ืคืจื•ื™ืงื˜ .hfm). ื›ื•ื•ื ื•ืŸ ืจืžืช ื”ืคืจื“ื” (0โ€“5)
2ื โ€” ืกืงื™ืจืช ื–ื™ื”ื•ื™ื™ืืžืœื‘ื ื™ื ืฆื‘ืขื•ื ื™ื™ื ืขืœ ื›ืœ ืฆื•ืจื”. ื’ืจื™ืจื” ืœื”ื•ืกืคื”, ืœื—ื™ืฆื” ืœืžื—ื™ืงื”, ื–ื™ื”ื•ื™ ืžื—ื“ืฉ
2ื‘ โ€” ืฉื™ื•ืš ืื•ืชื™ื•ืชืœื—ื™ืฆื” ืขืœ ื›ืจื˜ื™ืก + ื”ืงืœื“ืช ืื•ืช. ืžื™ื–ื•ื’/ืคื™ืฆื•ืœ ืœืคื™ ื”ืฆื•ืจืš
3 โ€” ืชืฆื•ื’ื” ืžืงื“ื™ืžื”ื”ืงืœื“ืช ื˜ืงืกื˜, ื›ื•ื•ื ื•ืŸ ื’ื•ื“ืœ/ื”ื–ื–ื”/ืจื™ื•ื•ื— ืœื›ืœ ืื•ืช, "ื”ื—ืœ ืขืœ ื”ื›ืœ"
4 โ€” ื™ืฆื™ืจืช ืคื•ื ื˜ื‘ื—ื™ืจืช ืฉื, ืžื˜ื-ื“ืื˜ื”, ื™ืฆื™ืจื”. ื”ืงื•ื‘ืฅ ื ืฉืžืจ ื‘-fonts_output/. ื™ื™ืฆื•ื ืคืจื•ื™ืงื˜

โœ๏ธ Font Editor โ€” ืขื•ืจืš ืคื•ื ื˜ื™ื ื•ื™ื–ื•ืืœื™

ืขื•ืจืš ื•ื™ื–ื•ืืœื™ ืœืงื‘ืฆื™ TTF โ€” ืขืจื™ื›ืช ื ืงื•ื“ื•ืช ื•ืงื•ื ื˜ื•ืจื™ื ื‘ืจืžืช ื”ื’ืœื™ืฃ, ืขื ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื—ื™ื”.

๐Ÿ“ธ ืฆื™ืœื•ื ืžืกืš

ืขืจื™ื›ืช ื ืงื•ื“ื•ืช ื•ืงื•ื ื˜ื•ืจื™ืื›ืœื™ื ืžืชืงื“ืžื™ื ื•ื™ืฆื•ื
Font Editor 1Font Editor 2

โœจ ืชื›ื•ื ื•ืช

ืขืจื™ื›ื” ื‘ืกื™ืกื™ืช

  • ื˜ืขื™ื ืช ืคื•ื ื˜ โ€” ืžืจืฉื™ืžืช ืคื•ื ื˜ื™ื ืงื™ื™ืžื™ื ืื• ื”ืขืœืืช TTF
  • ืชืฆื•ื’ืช ื’ืœื™ืคื™ื โ€” ืจืฉืช ืขื ื—ื™ืคื•ืฉ ืœืคื™ ืชื• / ืฉื
  • ืขืจื™ื›ืช ื ืงื•ื“ื•ืช โ€” ื’ืจื™ืจื”, ื—ืฆื™ื (Shift=1px, ืจื’ื™ืœ=10px), ืฉื™ื ื•ื™ ืจื•ื—ื‘
  • ืฉืžื™ืจื” / ืฉืžื™ืจื” ื‘ืฉื โ€” Ctrl+S ืื• ื›ืคืชื•ืจ
  • ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื—ื™ื” โ€” ืกืจื’ืœ ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื‘ืชื—ืชื™ืช ืขื ืฉืœื™ื˜ื” ืขืœ ื’ื•ื“ืœ

ื›ืœื™ื ืžืชืงื“ืžื™ื

  • ื‘ื—ื™ืจื” ืžืจื•ื‘ื” (Multi-select) โ€” Ctrl+Click, Shift+Click, Ctrl+A, ืื• ื’ืจื™ืจืช ืžืจืงื™ื–ื” (M)
  • ื˜ืจื ืกืคื•ืจืžืฆื™ื™ืช ื‘ื—ื™ืจื” โ€” ื”ื–ื–ื”, ืงื ื” ืžื™ื“ื”, ืžื—ื™ืงื” ืฉืœ ื ืงื•ื“ื•ืช ื ื‘ื—ืจื•ืช
  • ื›ืœื™ ืขื˜ (Pen Tool) โ€” ืฆื™ื•ืจ ืงื•ื ื˜ื•ืจื™ื ื—ื“ืฉื™ื (P), Alt+Click ืœื ืงื•ื“ื•ืช off-curve
  • ืฉื›ื‘ื•ืช / ืงื•ื ื˜ื•ืจื™ื โ€” ื›ืœ ืงื•ื ื˜ื•ืจ ื›ืฉื›ื‘ื” ืขื ืฆื‘ืข, ื ื™ืจืื•ืช, ืžื—ื™ืงื”
  • ืขื™ื’ื•ืœ ืคื™ื ื•ืช (Smooth Corners) โ€” ื‘ื—ื™ืจืช ื ืงื•ื“ื•ืช on-curve โ† ื›ืคืชื•ืจ "ืขื’ืœ ืคื™ื ื•ืช" ืขื ื‘ืงืจืช ืจื“ื™ื•ืก
  • ื”ื—ืœืคืช ืกื•ื’ ื ืงื•ื“ื” โ€” ืžืขื‘ืจ ื‘ื™ืŸ on-curve ืœ-off-curve ื‘ืœื—ื™ืฆื”
  • ื‘ื™ื˜ื•ืœ/ื—ื–ืจื” (Undo/Redo) โ€” Ctrl+Z / Ctrl+Y, ืขื“ 50 ืจืžื•ืช ืœื›ืœ ื’ืœื™ืฃ

ืฉื™ื ื•ื™ ืฆื•ืจื” (Transform)

  • ื”ืคื™ื›ื” (Flip) โ€” ืื•ืคืงื™ (H) ื•ืื ื›ื™ (Shift+H), ืœื ืงื•ื“ื•ืช ื ื‘ื—ืจื•ืช ืื• ืœื’ืœื™ืฃ ืฉืœื. ื’ื ื›ืคืชื•ืจื™ื ื‘-toolbar: โ‡„ / โ‡…
  • ืกื™ื‘ื•ื‘ (Rotate) โ€” 90ยฐ (R), -90ยฐ (Shift+R)
  • ื”ืขืชืงื” ื•ื”ื“ื‘ืงื” โ€” Ctrl+C/V ืœื ืงื•ื“ื•ืช ื ื‘ื—ืจื•ืช, ื”ืขืชืงืช ื’ืœื™ืฃ ืฉืœื ืœื’ืœื™ืฃ ืื—ืจ
  • ื”ื•ืกืคืช ื ืงื•ื“ื” ืขืœ ืงื˜ืข โ€” ืงืœื™ืง ื™ืžื ื™ ืขืœ ืงื• โ† "ื”ื•ืกืฃ ื ืงื•ื“ื” ื›ืืŸ"
  • ืชืคืจื™ื˜ ื”ืงืฉืจ (Right-click) โ€” ื’ื™ืฉื” ืžื”ื™ืจื” ืœืžื—ื™ืงื”, ื”ืคื™ื›ื”, ืกื™ื‘ื•ื‘, ื”ืขืชืงื”/ื”ื“ื‘ืงื”

ื™ื™ื‘ื•ื/ื™ื™ืฆื•ื (v5 โ€” ื—ื“ืฉ โœจ)

  • ื™ื™ื‘ื•ื SVG โ€” ื”ื“ื‘ืงืช ื ืชื™ื‘ SVG (ืชื•ื›ืŸ d) ืื• ื”ืขืœืืช ืงื•ื‘ืฅ SVG โ† ื”ืžืจื” ืื•ื˜ื•ืžื˜ื™ืช ืœื ืงื•ื“ื•ืช TrueType
  • ื™ื™ื‘ื•ื ืชืžื•ื ื” (v5.1 โ€” ื—ื“ืฉ โœจ) โ€” ื”ืขืœืืช ืชืžื•ื ื” (PNG/JPG) ืฉืœ ืื•ืช/ืชื• ื•ื”ืžืจื” ืื•ื˜ื•ืžื˜ื™ืช ืœืงื•ื ื˜ื•ืจื™ื ื•ืงืจื™ื•ืช TrueType
  • ื™ื™ืฆื•ื WOFF / WOFF2 / TTF โ€” ืชืคืจื™ื˜ Export ืขื ืฉืœื•ืฉื” ืคื•ืจืžื˜ื™ื. WOFF2 ื“ื•ืจืฉ ื—ื‘ื™ืœืช brotli
  • ืขืจื™ื›ืช ืžื˜ื-ื“ืื˜ื” โ€” ืฉื, ื’ืจืกื”, ืžืขืฆื‘, URL, ืจื™ืฉื™ื•ืŸ, Ascender/Descender/LineGap

ื›ืœื™ ืงื ื‘ืก (v5 โ€” ื—ื“ืฉ โœจ)

  • ื™ื“ื™ื•ืช ื‘ื–ื™ื™ื” (Bรฉzier Handles) โ€” ืงื•ื•ื™ื ืžืงื•ื•ืงื•ื•ื™ื ืžื ืงื•ื“ื•ืช off-curve ืœืฉื›ื ื•ืช on-curve, ื ื™ืชื ื™ื ืœื’ืจื™ืจื”
  • ื”ืฆืžื“ื” ืœืจืฉืช (Snap to Grid) โ€” ื ืงื•ื“ื•ืช ื ืฆืžื“ื•ืช ืœืจืฉืช ืžืชื›ื•ื•ื ืช; ืจืฉืช ืžื•ืฆื’ืช ื›ืฉื›ื‘ืช-ืขืœ ืขืœ ื”ืงื ื‘ืก
  • ืกืจื’ืœื™ื (Rulers) โ€” ืกืจื’ืœื™ื ืื•ืคืงื™ ื•ืื ื›ื™ ืžืกื‘ื™ื‘ ืœืงื ื‘ืก, ืžืฆื™ื’ื™ื ื™ื—ื™ื“ื•ืช ืคื•ื ื˜, ืžืชืขื“ื›ื ื™ื ืขื ื–ื•ื ื•ืคืืŸ
  • ืงื•ื•ื™ ืขื–ืจ ืžื•ืชืืžื™ื (Custom Guidelines) โ€” ื”ื•ืกืคืช ืงื•ื•ื™ื ืื•ืคืงื™ื™ื/ืื ื›ื™ื™ื ื‘ืžื™ืงื•ื ื—ื•ืคืฉื™, ื“ืื‘ืœ-ืงืœื™ืง ืœืžื—ื™ืงื”

ืจื™ื•ื•ื— ืื•ืชื™ื•ืช (Kerning) (v5 โ€” ื—ื“ืฉ โœจ)

  • ืขื•ืจืš kerning โ€” ืฆืคื™ื™ื” ื•ืขืจื™ื›ื” ืฉืœ ื›ืœ ื–ื•ื’ื•ืช ื”ืจื™ื•ื•ื— ื‘ืคื•ื ื˜
  • ื”ื•ืกืคื” ื•ืžื—ื™ืงื” ืฉืœ ื–ื•ื’ื•ืช โ€” ื‘ื—ื™ืจืช ืฉื ื™ ื’ืœื™ืคื™ื ื•ืงื‘ื™ืขืช ืขืจืš ืจื™ื•ื•ื— (ื—ื™ื•ื‘ื™/ืฉืœื™ืœื™)

ืžืžืฉืง ื•ืชืฆื•ื’ื” (v5 โ€” ื—ื“ืฉ โœจ)

  • ืคืื ืœื™ื ืžืชืงืคืœื™ื โ€” ืœื—ืฆื ื™ โ—€/โ–ถ ืžื›ื•ื•ืฆื™ื ืืช ืคืื ืœ ื”ื’ืœื™ืคื™ื ื•ืืช ืคืื ืœ ื”ืžืืคื™ื™ื ื™ื ื›ื“ื™ ืœื”ื’ื“ื™ืœ ืืช ืฉื˜ื— ื”ืขืจื™ื›ื”
  • ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ืžืจื•ื‘ืช-ื’ื“ืœื™ื โ€” ืžืฆื™ื’ื” ืืช ื”ื˜ืงืกื˜ ื‘-7 ื’ื“ืœื™ื (12โ€“96px) ื‘ืžืงื‘ื™ืœ
  • ื–ื•ื ื•ืคืืŸ โ€” ื’ืœื’ืœืช ืขื›ื‘ืจ ืœื–ื•ื, Space+ื’ืจื™ืจื” ืœืคืืŸ, ืœื—ืฆืŸ "Fit" ืœืื™ืคื•ืก
  • ืชืฆื•ื’ืช ืงื•ืื•ืจื“ื™ื ื˜ื•ืช โ€” ืจื™ื—ื•ืฃ ืขืœ ื ืงื•ื“ื” ืžืฆื™ื’ ืžื™ืงื•ื ื•ืžื–ื”ื” (on/off curve)

ืžืžืฉืง ื“ื•-ืฉืคืชื™ ๐Ÿ‡ฎ๐Ÿ‡ฑ ๐Ÿ‡บ๐Ÿ‡ธ

  • ืขื‘ืจื™ืช / ืื ื’ืœื™ืช โ€” ืžืชื’ ืฉืคื” ื‘ืคื™ื ืช ื”ืžืžืฉืง
  • ื ืฉืžืจ ื‘ื“ืคื“ืคืŸ โ€” ื”ื‘ื—ื™ืจื” ื ื–ื›ืจืช ื‘ื™ืŸ ื”ืคืขืœื•ืช
  • ื›ืœ ื”ืžื—ืจื•ื–ื•ืช ืžืชื•ืจื’ืžื•ืช โ€” ื™ื•ืชืจ ืž-130 ืžื—ืจื•ื–ื•ืช ืชื•ืจื’ืžื• ืœืฉืชื™ ื”ืฉืคื•ืช

โŒจ๏ธ ืงื™ืฆื•ืจื™ ืžืงืœื“ืช

ืงื™ืฆื•ืจืคืขื•ืœื”
Vื›ืœื™ ื‘ื—ื™ืจื”
Mืžืจืงื™ื–ื”
Pืขื˜
Hื”ืคื•ืš ืื•ืคืงื™
Shift+Hื”ืคื•ืš ืื ื›ื™
R / Shift+Rืกื™ื‘ื•ื‘ 90ยฐ / -90ยฐ
Ctrl+Zื‘ื™ื˜ื•ืœ
Ctrl+Y / Ctrl+Shift+Zื—ื–ืจื”
Ctrl+Aื‘ื—ืจ ื”ื›ืœ
Ctrl+Cื”ืขืชืง ื ืงื•ื“ื•ืช / ื’ืœื™ืฃ
Ctrl+Vื”ื“ื‘ืง
Ctrl+Sืฉืžื•ืจ
Deleteืžื—ืง ื ืงื•ื“ื•ืช / ืื™ืคื•ืก ื’ืœื™ืฃ
ื—ืฆื™ืื”ื–ื– (10px, Shift=1px)
+/-ื”ื’ื“ืœ/ื”ืงื˜ืŸ
Space+ื’ืจื™ืจื”ืคืืŸ ื”ืงื ื‘ืก
ื’ืœื’ืœืช ืขื›ื‘ืจื–ื•ื
?ื”ืฆื’ ืงื™ืฆื•ืจื™ ืžืงืœื“ืช
Escื‘ื˜ืœ ื‘ื—ื™ืจื” / ื‘ื˜ืœ ืขื˜

๐Ÿ—๏ธ ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜

hebrew-font-maker/
โ”œโ”€โ”€ backend/
โ”‚   โ”œโ”€โ”€ app.py                 # ืฉืจืช Flask โ€” ื™ื•ืฆืจ ืคื•ื ื˜ื™ื (ืคื•ืจื˜ 5000)
โ”‚   โ”œโ”€โ”€ image_processor.py     # ื–ื™ื”ื•ื™ ืื•ืชื™ื•ืช, ืงื•ื ื˜ื•ืจื™ื, separation levels
โ”‚   โ”œโ”€โ”€ font_generator.py      # ื™ืฆื™ืจืช TTF โ€” Bรฉzier, fallback glyphs, metadata
โ”‚   โ”œโ”€โ”€ hebrew_support.py      # ืžื™ืœื•ืŸ ืื•ืชื™ื•ืช, ืฆื•ืจื•ืช ืกื•ืคื™ื•ืช, RTL
โ”‚   โ””โ”€โ”€ font_editor_server.py  # ืฉืจืช Flask โ€” ืขื•ืจืš ืคื•ื ื˜ื™ื (ืคื•ืจื˜ 5001), ื™ื™ื‘ื•ื SVG, ื™ื™ืฆื•ื WOFF/WOFF2, kerning
โ”œโ”€โ”€ frontend/
โ”‚   โ”œโ”€โ”€ index.html             # ืžืžืฉืง ื™ื•ืฆืจ ื”ืคื•ื ื˜ื™ื (wizard 4 ืฉืœื‘ื™ื)
โ”‚   โ”œโ”€โ”€ script.js              # ืœื•ื’ื™ืงืช UI: ืฉื™ื•ืš, ืžื™ื–ื•ื’, ืชืฆื•ื’ื” ืžืงื“ื™ืžื”
โ”‚   โ””โ”€โ”€ style.css              # ืขื™ืฆื•ื‘ responsive + RTL
โ”œโ”€โ”€ font_editor/
โ”‚   โ”œโ”€โ”€ index.html             # ืžืžืฉืง ืขื•ืจืš ื”ืคื•ื ื˜ื™ื
โ”‚   โ”œโ”€โ”€ editor.js              # ืœื•ื’ื™ืงืช ืขื•ืจืš: ื‘ื—ื™ืจื”, ืขื˜, ืฉื›ื‘ื•ืช, undo, smooth, i18n, Bรฉzier handles, grid snap, rulers, guidelines, kerning, SVG import, multi-preview
โ”‚   โ””โ”€โ”€ editor.css             # ืขื™ืฆื•ื‘ ื›ื”ื” ืœืขื•ืจืš + ืกืจื’ืœื™ื, ืจืฉืช, ืงื•ื•ื™ ืขื–ืจ, ืคืื ืœื™ื ืžืชืงืคืœื™ื
โ”œโ”€โ”€ config.py                  # ื”ื’ื“ืจื•ืช (ื’ื•ื“ืœ ืคื•ื ื˜, ืกื™ื ื•ืŸ, ื ืชื™ื‘ื™ื)
โ”œโ”€โ”€ requirements.txt           # ื—ื‘ื™ืœื•ืช Python
โ”œโ”€โ”€ install.bat                # ืกืงืจื™ืคื˜ ื”ืชืงื ื” (venv + pip)
โ”œโ”€โ”€ run.bat                    # ื”ืคืขืœืช ื™ื•ืฆืจ ื”ืคื•ื ื˜ื™ื
โ”œโ”€โ”€ run_fonteditor.bat         # ื”ืคืขืœืช ืขื•ืจืš ื”ืคื•ื ื˜ื™ื
โ”œโ”€โ”€ fonts_output/              # ืชื™ืงื™ื™ืช ืคืœื˜ (ื ื•ืฆืจืช ืื•ื˜ื•ืžื˜ื™ืช)
โ””โ”€โ”€ temp/                      # ืงื‘ืฆื™ื ื–ืžื ื™ื™ื (ื ื•ืฆืจืช ืื•ื˜ื•ืžื˜ื™ืช)

๐Ÿ”ง ื˜ื›ื ื•ืœื•ื’ื™ื•ืช

ืจื›ื™ื‘ื˜ื›ื ื•ืœื•ื’ื™ื”
ืฉืจืชFlask 2.3 + Flask-CORS
ืขื™ื‘ื•ื“ ืชืžื•ื ื”OpenCV 4.8 (Otsu, RETR_CCOMP, morphological operations)
ื™ืฆื™ืจืช/ืขืจื™ื›ืช ืคื•ื ื˜ื™ืfontTools (FontBuilder, TTGlyphPen, GlyphCoordinates, SVGPathPen)
ืฆื“ ืœืงื•ื—Vanilla HTML/CSS/JS, Canvas API, SVG (ืœืœื frameworks)
ื™ื™ืฆื•ืWOFF, WOFF2 (ื“ื•ืจืฉ brotli), TTF
ืกื‘ื™ื‘ื”Python venv, Windows batch scripts

๐Ÿ“ ื”ืขืจื•ืช ื˜ื›ื ื™ื•ืช

ื™ื•ืฆืจ ื”ืคื•ื ื˜ื™ื

  • ืื•ืชื™ื•ืช ืกื•ืคื™ื•ืช: ืฃ, ืฅ, ืŸ, ืš, ืง โ€” ื”ื–ื–ื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ -200 ื™ื—ื™ื“ื•ืช ืžืชื—ืช ืœืงื• ื”ื‘ืกื™ืก
  • ื—ื•ืจื™ื ื‘ืื•ืชื™ื•ืช: ืฉื™ืžื•ืฉ ื‘-RETR_CCOMP ืœื–ื™ื”ื•ื™ ืงื•ื ื˜ื•ืจื™ื ื—ื™ืฆื•ื ื™ื™ื ื•ืคื ื™ืžื™ื™ื ื‘ื ืคืจื“
  • ืขืงื•ืžื•ืช ื—ืœืงื•ืช: qCurveTo โ€” B-spline ืฉื‘ื• ื›ืœ ื”ื ืงื•ื“ื•ืช ื”ืŸ off-curve, ื•ื ืงื•ื“ื•ืช ื”ืืžืฆืข ื”ืŸ on-curve
  • ื—ื™ืœื•ืฅ ื ืืžืŸ: ืงื•ื ื˜ื•ืจื™ื ืžื”ืชืžื•ื ื” ื”ืžืงื•ืจื™ืช (ืœื ื”ืžืขื•ื‘ื“ืช) ืœืฉืžื™ืจืช ืฆื•ืจื”
  • ืจืžื•ืช ื”ืคืจื“ื”: erosion/dilation ืขื kernel ืฉื’ื“ืœ ืœืคื™ ืจืžื” (0โ€“5)
  • Fallback glyphs: ~46 ืชื•ื•ื™ื ืž-Arial, ืžื•ืชืืžื™ื ืœ-unitsPerEm=1024
  • ื™ื™ืฆื•ื ืคืจื•ื™ืงื˜ (v2): .hfm โ€” ืชืžื•ื ื” + ืงื•ื ื˜ื•ืจื™ื + ืฉื™ื•ื›ื™ื + ื›ื•ื•ื ื•ื ื™ื + ืžื˜ื-ื“ืื˜ื” ื‘ืงื•ื‘ืฅ ืขืฆืžืื™

ืขื•ืจืš ื”ืคื•ื ื˜ื™ื

  • TrueType points: ื ืงื•ื“ื•ืช on-curve (flag=1) ื™ื•ืฆืจื•ืช ืงื•ื•ื™ื ื™ืฉืจื™ื, off-curve (flag=0) โ€” ืขืงื•ืžื•ืช ืงื•ื•ืื“ืจื˜ื™ื•ืช
  • Smooth corners: ื”ื—ืœืคืช ื ืงื•ื“ืช ืคื™ื ื” ื‘-3 ื ืงื•ื“ื•ืช (on โ†’ off โ†’ on) ืœื™ืฆื™ืจืช Bรฉzier curve
  • Undo/Redo: ืžื—ืกื ื™ืช snapshots ืœื›ืœ ื’ืœื™ืฃ (ืขื“ 50 ืจืžื•ืช), ื›ืœ ืคืขื•ืœืช ืขืจื™ื›ื” ืฉื•ืžืจืช ืžืฆื‘ ืœืคื ื™ ื”ืฉื™ื ื•ื™
  • i18n: ืžื™ืœื•ืŸ ืชืจื’ื•ื 130+ ืžื—ืจื•ื–ื•ืช, ืฉืคื” ื ืฉืžืจืช ื‘-localStorage, RTL/LTR ืื•ื˜ื•ืžื˜ื™
  • ื™ื™ื‘ื•ื SVG: ืคื™ืจื•ืง ืžืœื ืฉืœ ื ืชื™ื‘ื™ SVG (M/L/H/V/Q/C/S/T/A/Z) โ€” ื”ืžืจืช cubicโ†’quadratic, ื”ื™ืคื•ืš Y ืœืงื•ืื•ืจื“ื™ื ื˜ื•ืช ืคื•ื ื˜, scale ืžืชื›ื•ื•ื ืŸ
  • ื™ื™ืฆื•ื WOFF/WOFF2: ืฉื™ืžื•ืฉ ื‘-fontTools flavor attribute. WOFF2 ื“ื•ืจืฉ ื—ื‘ื™ืœืช brotli (ืžื•ืชืงื ืช ื‘-requirements)
  • Kerning: ืงืจื™ืื”/ื›ืชื™ื‘ื” ืฉืœ kern table format 0 ื“ืจืš fontTools. ืชืฆื•ื’ืช ื–ื•ื’ื•ืช ืขื ืฉืžื•ืช ื’ืœื™ืคื™ื
  • Bรฉzier handles: ืงื•ื•ื™ื ืžืงื•ื•ืงื•ื•ื™ื ื‘ื™ืŸ ื ืงื•ื“ื•ืช off-curve ืœืฉื›ื ื•ืชื™ื”ืŸ โ€” ื•ื™ื–ื•ืืœื™ื–ืฆื™ื” ืฉืœ ืขืงื•ืžื•ืช ื”ืฉืœื™ื˜ื”
  • Snap to grid: ื”ืฆืžื“ื” ื—ื›ืžื” โ€” snapVal() ืžืขื’ืœ ืœื›ืคื•ืœื•ืช ืฉืœ gridSnapSize (ื‘ืจื™ืจืช ืžื—ื“ืœ 50 ื™ื—ื™ื“ื•ืช)
  • Rulers: Canvas API ืžืฆื™ื™ืจ ืกืจื’ืœื™ื ืื•ืคืงื™/ืื ื›ื™, rulerStep() ืžื—ืฉื‘ ืžืจื•ื•ื— ืื“ืคื˜ื™ื‘ื™ ืœืคื™ ืจืžืช ื”ื–ื•ื
  • Custom guidelines: ืงื•ื•ื™ื ืื•ืคืงื™ื™ื/ืื ื›ื™ื™ื ื—ื•ืคืฉื™ื™ื, ื ืฉืžืจื™ื ื‘-State, ื“ืื‘ืœ-ืงืœื™ืง ืœืžื—ื™ืงื”

๐Ÿ“„ ืจื™ืฉื™ื•ืŸ

MIT License