DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

Overview

DrawBot Test Bench DrawBot App Builder codecov

DrawBot

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics. The built-in graphics primitives support rectangles, ovals, (bezier) paths, polygons, text objects, colors, transparency and much more. You can program multi-page documents and stop-motion animations. Export formats include PDF, SVG, PNG, JPEG, TIFF, animated GIF and MP4 video.

To download the latest version of the app, go to
http://www.drawbot.com/content/download.html


Using DrawBot as a Python module

DrawBot can also be installed as a Python module, the app is not required.

Install

The easiest way is to use pip:

$ pip install git+https://github.com/typemytype/drawbot

To install it manually, follow these instructions:

download: https://github.com/typemytype/drawbot/archive/master.zip

run cd run python setup.py install

Usage

import drawBot

drawBot.newDrawing()
drawBot.newPage(1000, 1000)
drawBot.rect(10, 10, 100, 100)
drawBot.saveImage("~/Desktop/aRect.png")
drawBot.endDrawing()

It is adviced to start with newDrawing() and end with endDrawing(), to clear the instruction stack and remove installed fonts.


Compile DrawBot from source

compile drawBot.app (with UI)

Required packages:

(Most of these are available through pip.)

Compile:

DrawBot is compiled with py2app into an application package.

cd path/To/drawBot
python setupApp.py py2app

compile drawBot Python module only

This module only works on Mac OS as it requires PyObjC, AppKit, CoreText Quartz and more.

Required packages:

Compile:

cd path/To/drawBot
python setup.py install

Release protocol

Comments
  • PDF header

    PDF header

    when importing DrawBot and generating a PDF, I'm getting an error after an update;

    failed to find PDF header:%PDF' not found.`

    as a warning, but second PDF won't build with this error:

    It is advised to use 'size()' at the top of a script

    Is this a new issue or am I doing something wrong?

    opened by michielkauwatjoe 25
  • Formatted string origin with different alignment

    Formatted string origin with different alignment

    I am using FormattedString() with "right" and "center" alignments for multiline strings, and noticed that text() will draw it the origin as the bottom left corner of the final line of the text. This means that for right and centered text, I cannot easily predict the position of the text relative to the origin point, because it is dependent on the length of the content in the last line.

    A demo:

    for alignment in ['center', 'right']:
        for myString in ['AA\nAAAA', 'AAAA\nAA']:
            newPage(1000, 1000)
            translate(250, 250)
            oval(-10, -10, 20, 20)
            fs = FormattedString(myString, align=alignment, fontSize=200)
            b = BezierPath()
            b.text(fs)
            drawPath(b)
    

    I'm not sure if there's actually an issue to be solved here, but I am curious if there a way to get them placed consistently?

    Of course this is not an issue when using textBox() instead of text(), but unfortunately I am trying to use this in conjunction BezierPath() which does not have a textBox() method.

    Have you considered making the origin for center-aligned text at the bottom center, and for right-aligned at the bottom right? (this is similar to what happens to alignments of basic text fields in Illustrator). I understand that a FormattedString can have more than one alignment, so maybe that’s not a perfect solution either.

    I think I might be able to work around this by calculating the final line of the string, making a separate FormattedString object, getting the textSize()[0] of that, and then offsetting the text object by that amount. Just wondering if there’s a more straightforward way before I go that route.

    As always, many many thanks!

    opened by djrrb 22
  • Numpy again (and NetworkX) in DrawBotPy3

    Numpy again (and NetworkX) in DrawBotPy3

    (PS: since Just closed the last version of this issue, I can't re-open it—sorry.)

    Hate to dig up an old issue, but I'm at a point in a current project in DBPy3 where I am ahead of my skis regarding graph and network functions, and could sure use numpy and NetworkX. I can import numpy in the 2.7 version of DrawBot thanks to last year's thread and Just/Frederik's help (thanks again, guys), but not NetworkX—and I can't import either one in Py3.

    I'm happy to download and install these modules by hand and update directories myself—for whatever reason, perhaps because of permissions issues with a school machine, who knows—I can't install these modules with pip (either pip can't find them or appropriate versions of them, or DB can't find them once they're installed, and sudo runs me into permissions errors). I just need to know where to put them and what edits to what scripts need making. (Again feeling the shame of being a Python dilettante, sorry.)

    opened by MauriceMeilleur 20
  • numpy headaches

    numpy headaches

    This is less an issue than a question, and probably one somebody with more experience than I have wouldn't have problems with at all.

    But here goes: I can't for the life of me get scripts to import numpy. scimath, math, work fine, but here's the error thrown if I import numpy:

    Traceback (most recent call last): File "", line 1, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/init.py", line 153, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/add_newdocs.py", line 13, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/init.py", line 17, in ImportError: cannot import name scimath

    opened by MauriceMeilleur 19
  • Issue with application of OpenType features

    Issue with application of OpenType features

    Hi,

    I’m having issues applying OpenType features to text in a PDF. I’ve rewritten my own renderer to write original drawBot code so I can test it in the main DrawBot.app to rule out problems with my own code.

    For instance, the sups feature doesn’t apply. I’ve collected the files to test here. The example with the sups feature is in line 408 (result shows on page 3 in the PDF). The feature gets turned on beforehand and turned off afterwards. I found this to cause less confusion in the rendering than explicitly setting all available features at once.

    What puzzles me: If I reduce the code to just the necessary lines to render that text with the sups feature, it renders fine (never mind that the feature isn’t written professionally yet, as in all the glyphs in the example would get replaced at the moment, not contextually...). That means that somewhere along the way someone got confused with the commands to the point where features don’t get applied properly anymore.

    So this works, which is exactly the same code, only much less:

    import os
    
    newPage(595.275590551, 841.88976378)
    installFont(os.path.join(os.path.dirname(__file__), 'NonameSans-Regular.otf'))
    installFont(os.path.join(os.path.dirname(__file__), 'NonameSans-Bold.otf'))
    
    ########################
    
    cmykFill(0.0, 0.0, 0.0, 1.0, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(28.8)
    
    font('NonameSans-Bold')
    fontSize(24)
    language(None)
    textBox(u'''120m2''', (255.118110236, 501.732283465, 141.732283465, 56.6929133858), align = 'center')
    
    ########################
    
    fill(1.0, 0.411764705882, 0.490196078431, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(24.0)
    
    font('NonameSans-Regular')
    fontSize(20)
    language(None)
    textBox(u'''→''', (396.850393701, 527.811023622, 28.3464566929, 28.3464566929), align = 'center')
    
    ########################
    
    cmykFill(0.0, 0.0, 0.0, 1.0, 1.0)
    stroke(None)
    strokeWidth(None)
    lineHeight(28.8)
    
    font('NonameSans-Bold')
    fontSize(24)
    openTypeFeatures(sups=True)
    language(None)
    textBox(u'''120m2''', (425.196850394, 501.732283465, 141.732283465, 56.6929133858), align = 'center')
    openTypeFeatures(sups=False)
    
    opened by yanone 19
  • proposal: add support for ID and Class attributes to BezierPath

    proposal: add support for ID and Class attributes to BezierPath

    DrawBot can generate SVGs; SVGs can be embedded in HTML and styled with CSS just like the rest of the page.

    SVG objects need an ID or class so that CSS can refer to them. in the example below, id and class attributes were added manually after the SVG was generated.

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>SVG test</title>
    <style>
        svg { background-color: yellow; }
        #circle { fill: grey; }
        #circle:hover { stroke: magenta; }
        #square { stroke: red; stroke-width: 20px; }
        .shape:hover { fill: black !important; }
    </style>
    </head>
    <body>
    <!-- embedded SVG -->
    <svg height="800" version="1.1" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     <path id='square' class='shape' d="M100,100 l400,0 l0,400 l-400,0 Z M100,100" fill="rgb(0,0,255)" transform="matrix(1,0,0,-1,0,800)"/>
     <path id='circle' class='shape' d="M641.42,358.58 c78.1,78.1,78.1,204.74,0,282.84 c-78.1,78.1,-204.74,78.1,-282.84,0 c-78.1,-78.1,-78.1,-204.74,0,-282.84 c78.1,-78.1,204.74,-78.1,282.84,0 Z M641.42,358.58" fill="rgb(255,0,0)" stroke="rgb(0,255,0)" stroke-width="20" transform="matrix(1,0,0,-1,0,800)"/>
    </svg>
    </body>
    </html>
    

    Proposal

    add support for setting an ID and/or class when the BezierPath is created:

    size(800, 800)
    
    B1 = BezierPath(ID='square', Class='shape')
    B1.rect(100, 100, 400, 400)
    fill(0, 0, 1)
    drawPath(B1)
    
    B2 = BezierPath(ID='circle', Class='shape')
    B2.oval(300, 300, 400, 400)
    fill(1, 0, 0)
    stroke(0, 1, 0)
    strokeWidth(20)
    drawPath(B2)
    
    saveImage('output.svg')
    

    thanks!

    opened by gferreira 18
  • Fonts are not reloaded even when changing on disk

    Fonts are not reloaded even when changing on disk

    I am using DrawBot to create proofs, the fonts used in those proofs are re-generated frequently. When I run the script from the DrawBot window, the font file that is picked up first stays active forever.

    My script is wrapped like this:

    newDrawing()
    	for fontFile in fontFiles:
    		newPage()
    		fs = FormattedString(
    			proofText, fontFile
    		)
    		text(fs)
    	for fontFile in fontFiles:
    		uninstallFont(fontFile)
    endDrawing()
    

    I explicitly added the newDrawing() and endDrawing() hoping it would have some kind of effect, but no. It works as expected when I run the script from the command line, but it sometimes is nice to have that visual output …

    bug 
    opened by frankrolf 18
  • *** DrawBot warning: OpenType feature 'numr/'dnom' not available ***

    *** DrawBot warning: OpenType feature 'numr/'dnom' not available ***

    Hi there, getting an error when trying to access Numerator numr and Denominator dnom features, not sure why!

    DrawBot: 3.118.1 (Extension) System: Mac OS 10.13.6

    Take a font like Source Serif Bold, which has simple numr and dnom features as follows:

    @FIG_LINING_TAB    =  [  zero       one       two       three       four       five       six       seven       eight       nine       ];
    @FIG_NUMR          =  [  zero.numr  one.numr  two.numr  three.numr  four.numr  five.numr  six.numr  seven.numr  eight.numr  nine.numr  ];
    @FIG_DNOM          =  [  zero.dnom  one.dnom  two.dnom  three.dnom  four.dnom  five.dnom  six.dnom  seven.dnom  eight.dnom  nine.dnom  ];
    
    @PUNCT_SMALL_FIG    = [ bracketleft      bracketright      parenleft      parenright      period      comma      ];
    @PUNCT_NUMR         = [ bracketleft.numr bracketright.numr parenleft.numr parenright.numr period.numr comma.numr ];
    @PUNCT_DNOM         = [ bracketleft.dnom bracketright.dnom parenleft.dnom parenright.dnom period.dnom comma.dnom ];
    
    #--------------------------------------
    feature numr { # Numerators
        lookup NUMR {
            sub @FIG_LINING_TAB by @FIG_NUMR;
            sub @PUNCT_SMALL_FIG by @PUNCT_NUMR;
        } NUMR;
    } numr;
    
    
    #--------------------------------------
    feature dnom { # Denominators
        sub @FIG_LINING_TAB by @FIG_DNOM;
        sub @PUNCT_SMALL_FIG by @PUNCT_DNOM;
    } dnom;
    

    And then the following DrawBot code:

    import drawBot as db
    
    db.newPage(500,100)
    s = db.FormattedString("123/45679",
        font="SourceSerifPro-Bold.otf",
        fontSize=100,
        openTypeFeatures={"dnom": True}
    )
    
    db.text(s, (20,20))
    

    The above results in

    *** DrawBot warning: OpenType feature 'dnom' not available ***
    

    Same with numr. If you replace dnom with frac, the code works, and both numerators and denominators show up.

    The numr and dnom features work in other programs (like Adobe InDesign), and FeaturePreview. Any idea why they aren't working here?

    DrawBot Error.zip

    opened by colinmford 16
  • Weird FormattedString issue on 10.15

    Weird FormattedString issue on 10.15

    I installed the 10.15 Beta on my secondary computer just to poke around a bit. When trying out some basic DrawBot, I stumbled upon this problem:

    content = 'abc'
    font_name = 'LucidaGrande'
    fs = FormattedString()
    fs.append(content, font=font_name, fontSize=20)
    fs.append(' ')
    fs.append(font_name, font='InputMono-Regular', fontSize=10)
    
    text(fs, (100, 200))
    

    The script runs, and displays output, but also the following traceback:

    Traceback (most recent call last):
      File "<untitled>", line 8, in <module>
      File "drawBot/drawBotDrawingTools.pyc", line 1611, in text
      File "drawBot/drawBotDrawingTools.pyc", line 1779, in textBox
      File "drawBot/context/baseContext.pyc", line 2310, in clippedText
      File "drawBot/context/baseContext.pyc", line 1180, in __getitem__
      File "drawBot/context/baseContext.pyc", line 904, in __init__
      File "drawBot/context/baseContext.pyc", line 912, in _setAttribute
      File "drawBot/context/baseContext.pyc", line 1354, in openTypeFeatures
      File "drawBot/context/baseContext.pyc", line 1368, in listOpenTypeFeatures
      File "drawBot/misc.pyc", line 362, in wrapper
      File "drawBot/context/tools/openType.pyc", line 509, in getFeatureTagsForFontName
      File "drawBot/context/tools/openType.pyc", line 495, in getFeatureTagsForDescriptions
      File "objc/_convenience_mapping.pyc", line 18, in __getitem__objectForKey_
      File "objc/_convenience.pyc", line 101, in container_unwrap
    KeyError: 'CTFeatureSelectorIdentifier'
    
    

    It is entirely possible this has nothing to do with DrawBot at all, but I thought it might be interesting to know about it.

    opened by frankrolf 15
  • Is it possible to detect missing glyphs in a font? Are there good workarounds?

    Is it possible to detect missing glyphs in a font? Are there good workarounds?

    I'm working on a simple tool for Drawbot (code on GitHub) to juxtapose characters in a string in letters from multiple fonts. The ultimate intent is to test fonts in early development, where I want to determine the proper relative proportions of characters (e.g. find the best x-height between a regular and a bold) and check that different styles in a larger type system are stylistically related (e.g. see that a sans and serif have a similar feeling between letters).

    For example, here's a partially-drawn lowercase set against two existing fonts:

    image

    This example uses a script font to make it obvious where characters are not-yet drawn. However, it would be more effective to have more control over the fallback font in these spaces that are present, but not the focus. It would be nice to do something like make these into light-gray letters or display notdef glyphs.

    A few things that seem like they might potentially help, though I haven't been able to accomplish them / find methods for them yet:

    • Directly detecting if a glyph is missing from the target font, and triggering some code
    • Detecting some UFO parameter of the fallback font, when the fallback font is used, and use that to change its size/color/content. E.g. checking if a character's x-height is equal to the x-height of the fallback font, then manipulating it.
    • Creating a list of all existing characters in a given font, and if the character in the test string doesn't match one of those, triggering some code.

    Hacky ways I've considered are:

    • Making all glyphs in Robofont, but leaving them empty until I can draw them (this would make the tool less helpful for others, though)
    • Finding a system font on macOS that is entirely bullets/rectangles/something similar, though even if such a system font exists (I don't know of any), this still wouldn't allow the flexibility or control that would be ideal to make this truly useful.

    I've already asked @justvanrossum, and he suggested filing an issue here, as detecting missing glyphs is not something he is aware of, but something which might be useful. If there is a simpler way to handle a case like this, I'd be excited to learn about it! If it would take building a new feature, however, I'd be happy to contribute however I can.

    Thanks for building such a great set of software!

    opened by thundernixon 15
  • [question] position of first baseline?

    [question] position of first baseline?

    In a text box, how does DrawBot specify the position of the first baseline for a given font? I am currently working on a script that layers different fonts, and need to calculate the baseline offset – unfortunately that’s trickier than expected.

    A common assumption is just subtracting the hhea.ascent value from the top of the text frame, but it’s not that simple – especially in fonts where hhea.ascent + |hhea.descent| != 1000.

    Here is my test data (for simplicity’s sake, font size = UPM = 1000):

        # SourceSansPro-Bold
        # head.yMax: 1009
        # hhea.ascent: 984
        # hhea.descent: -273
        # hhea.lineGap: 0
        # baseline is 855 below top of text frame
    
        # SourceSerifPro-Light
        # head.yMax: 976
        # hhea.ascent: 1036
        # hhea.descent: -335
        # hhea.lineGap: 0
        # baseline is 850 below top of text frame
    
        # MyriadPro-Light
        # head.yMax: 935
        # hhea.ascent: 750
        # hhea.descent: -250
        # hhea.lineGap: 200
        # baseline is 750 below top of text frame
    

    This may have been solved by @petrvanblokland – I assume pageBot can deal with baselines?

    question 
    opened by frankrolf 15
  • Cancelling with command-period crahses hard

    Cancelling with command-period crahses hard

    import time
    
    for i in range(100):
        print(i)
        time.sleep(0.2)
    

    Type command-period while the above is running. It exists with a hard crash Illegal instruction: 4

    opened by justvanrossum 8
  • Code completion currently doesn't seem to work

    Code completion currently doesn't seem to work

    Traceback (most recent call last):
      File "/Users/just/code/git/drawbot/dist/DrawBot.app/Contents/Resources/lib/python3.9/drawBot/ui/codeEditor.py", line 288, in _pythonWordCompletions
    TypeError: __init__() got an unexpected keyword argument 'source'
    
    opened by justvanrossum 0
  • missing module »cmath«

    missing module »cmath«

    Hi all, since the update to 3.129 (python3.10) it seems that the module »cmath« is missing. When I'm using the pandas-tool (https://pandas.pydata.org) or just using import cmath an error Message pops up: »ModuleNotFoundError: No module named 'cmath'«

    opened by READ 5
  • deprecated workflow

    deprecated workflow

    Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

    https://github.com/typemytype/drawbot/actions/runs/3750328273/jobs/6369899166#step:12:10

    opened by typemytype 1
  • listNamedInstances return wrong value

    listNamedInstances return wrong value

    Hi,

    I tried recently to get instances name of a variable using listNamedInstances(fontPath) I tried different variable font (mine and some from Google Font) and the function always return an OrderedDict which contain only the first instance.

    Here are some results with Google Fonts :

    OpenSans OrderedDict([('OpenSansRoman-Light', {'wght': 800.0, 'wdth': 75.0})])

    Montserrat OrderedDict([('Montserrat-Thin', {'wght': 900.0})])

    Raleway OrderedDict([('Raleway-Thin', {'wght': 900.0})])

    Inter OrderedDict([('Inter-Regular_Thin', {'wght': 900.0, 'slnt': -10.0})])

    opened by HugoJourdan 5
Releases(3.129)
  • 3.129(Dec 22, 2022)

    • Upgrade to python 3.9!!
    • textBox box: negative rectangles will be normalized.
    • Fix bug while extracting variable font name ids.
    • Improve ImageObject generators.
    • Add support for formatting code, see Python menu.
    • Improve support for pathlib.Path where ever a path is needed.
    • Support for saveImage("NSImage") and saveImage("PIL") returning image objects.
    • Add support for norm, lerp and remap.
    • Support formattedText.appendGlyph(index): adding glyphs by index.
    • Add with drawing() wrapping newDrawing() and endDrawing().
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(51.88 MB)
  • 3.128(Aug 9, 2021)

  • 3.127(Apr 29, 2021)

    • Allow Path objects in places where a path is an argument: saveImage(pathObject), image(pathObject, ...)
    • Add support for asyncio by lauching the app with corefoundationasyncio.
    • Remove mov context in favor of mp4 as QTKit is not supported anymore.
    • Always draw a white background while rendering to mp4.
    • Improve reading out and using fonts from disk, use them direclty instead of installing them.
    • Update documentation.
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(45.61 MB)
  • 3.126(Jun 2, 2020)

    • Improve update checker.
    • Fix docs for listOpenTypeFeatures.
    • Add argument while saving an animated gif: loop.
    • Add argument while saving an image: antiAliasing.
    • Improve the difference between kerning (an OpenType feature) and tracking (adding white space between characters).
    • Add textBoxCharacterBounds(text, box) returning a list of typesetted bounding boxes.
    • Improve text(..) typesetting with multiline text and paragraph styles.
    • Add formattedString.url(url).
    • Add linkURL(url, box).
    • Add option continuous in Variable(.., continuous=False).
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(45.16 MB)
  • 3.125(Apr 22, 2020)

  • 3.124(Mar 28, 2020)

  • 3.123(Mar 3, 2020)

    • Fully notarized and built with GitHub Actions!!!!
    • Improve pip installer.
    • Support viewBox in svg output.
    • Point attributes of a BezierPath are immutable.
    • Fix bug when an FormattedString contains an empty last line.
    • Don't optimize an empty BezierPath.
    • Improve updater message.
    • Upgrade code editor lexer to python3.
    • Upgrade internal tool potrace and mkbitmap.
    • Add context-specific attributes for BezierPath and FormattedString: svgLink, svgID, svgClass.
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(44.74 MB)
  • 3.122(Nov 3, 2019)

    • Adding bezierPath.expandStroke(width, lineCap="round", lineJoin="round", miterLimit=10) (thanks to Bahman Eslami)
    • Improved internal OpenType feature tags setting
    • Improved complex formattedString type setting
    • Improved alignment with text() and FormattedString
    • Added a DrawBot frontend for pip/PyPI to make it super easy to install third-party packages: see menu Python -> Install Python Packages
    • Fixed text stroke behavior (but is a breaking change): strokeWidth on text no longer scales with the fontSize
    • Removed support for .mov export on 10.15 and up (QTKit is no longer supported there)
    • Fixed extracting single frames from .gif files
    • Improved setup.py, so drawbot-as-a-module can be easily installed with pip using a github URL
    • All test now run on Travis CI (and soon also on GitHub Actions)
    • Removed Python 2 code
    • Many small issues were fixed
    Source code(tar.gz)
    Source code(zip)
    DrawBot.dmg(49.96 MB)
Png-to-stl - Converts PNG and text to SVG, and then extrudes that based on parameters

have ansible installed locally run ansible-playbook setup_application.yml this sets up directories, installs system packages, and sets up python envir

1 Jan 03, 2022
Optimize/Compress images using python

Image Optimization Using Python steps to run the script run the command to install the required libraries pip install -r requirements.txt create a dir

Shekhar Gupta 1 Oct 15, 2021
Pixel art as well as various sets for hand crafting

Pixel art as well as various sets for hand crafting

1 Nov 09, 2021
An automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents

Mylar Note that feature development has stopped as we have moved to Mylar3. EOL for this project is the end of 2020 and will no longer be supported. T

979 Dec 13, 2022
Create a static HTML/CSS image gallery from a bunch of images.

gallerize Create a static HTML/CSS image gallery from a bunch of images.

Jochen Kupperschmidt 19 Aug 21, 2022
A quick and dirty QT Statusbar implementation for grabbing GIFs from Tenor, since there is no offical or unofficial one I found. This was intended for use under Linux, however it was also functional enough on MacOS.

Statusbar-TenorGIF App for Linux A quick and dirty QT Statusbar implementation for grabbing GIFs from Tenor, since there is no offical one and I didnt

Luigi DaVinci 1 Nov 01, 2021
Generate meme GIFs in which an image you choose can be viewed by the user only after they wait a whole hour.

Generate meme GIFs in which an image you choose can be viewed by the user only after they wait a whole hour.

Feliks Maak 1 Jan 31, 2022
A Blender add-on to create interesting meshes using symmetry

Procedural Symmetries This Blender add-on automates the process of iteratively applying a set of reflection planes to a base mesh. The result will con

1 Dec 29, 2021
Bringing vtk.js into Dash and Python

Dash VTK Dash VTK lets you integrate the vtk.js visualization pipeline directly into your Dash app. It is powered by react-vtk-js. Docs Demo Explorer

Plotly 88 Nov 29, 2022
Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Kizdude 2 Jan 22, 2022
Simple Python package to convert an image into a quantized image using a customizable palette

Simple Python package to convert an image into a quantized image using a customizable palette. Resulting image can be displayed by ePaper displays such as Waveshare displays.

Luis Obis 3 Apr 13, 2022
Parking management project which generates barcode parking ticket with user-friendly Tkinter program GUI

Parking-management-system Parking management project which generates barcode parking ticket with user-friendly Tkinter program GUI How to run Download

1 Jul 03, 2022
ImageStrike是一款用于CTF中图片隐写的综合利用工具

🎈 简介 ImageStrike是一款使用PyQT5开发,用于CTF中图片隐写的综合利用工具

zR00t1 133 Dec 27, 2022
Image Processing - Make noise images clean

影像處理-影像降躁化(去躁化) (Image Processing - Make Noise Images Clean) 得力於電腦效能的大幅提升以及GPU的平行運算架構,讓我們能夠更快速且有效地訓練AI,並將AI技術應用於不同領域。本篇將帶給大家的是 「將深度學習應用於影像處理中的影像降躁化 」,

2 Aug 04, 2022
CadQuery is an intuitive, easy-to-use Python module for building parametric 3D CAD models.

A python parametric CAD scripting framework based on OCCT

1.9k Dec 30, 2022
Hello, this project is an example of how to generate a QR Code using python 😁

Hello, this project is an example of how to generate a QR Code using python 😁

Davi Antonaji 2 Oct 12, 2021
An application that maps an image of a LaTeX math equation to LaTeX code.

Convert images of LaTex math equations into LaTex code.

1.3k Jan 06, 2023
SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration

SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration

672 Jan 05, 2023
Small wrapper around 3dmol.js and html2canvas for creating self-contained HTML files that display a 3D molecular representation.

Description Small wrapper around 3dmol.js and html2canvas for creating self-contained HTML files that display a 3D molecular representation. Double cl

David Meijer 1 Dec 02, 2021
MetaStalk is a tool that can be used to generate graphs from the metadata of JPEG, TIFF, and HEIC images

MetaStalk About MetaStalk is a tool that can be used to generate graphs from the metadata of JPEG, TIFF, and HEIC images, which are tested. More forma

Cyb3r Jak3 1 Jul 05, 2021