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)
Craft PNG files that appear completely different in Apple software

Ambiguous PNG Packer Craft PNG files that appear completely different in Apple software

David Buchanan 1k Dec 29, 2022
Simplest QRGenerator with a cool feature (-sh=True :D)

Simple QR-Codes Generator :D Generates QR-codes, nothing more and nothing less . How to use Just run ./install.sh to set all the dependencies up, th

RENNAARENATA 1 Dec 11, 2021
🛹 Turn an SVG into an STL for stencil creation purposes

svg2stl This repository provides a script which takes as input an SVG such as this one: It outputs an STL file like this one: You can also see an inte

Max Halford 3 Dec 29, 2021
A python based library to help you create unique generative images based on Rarity for your next NFT Project

Generative-NFT Generate Unique Images based on Rarity A python based library to help you create unique generative images based on Rarity for your next

Kartikay Bhutani 8 Sep 21, 2022
A linear stairs generation add-on for Blender

Linear Stairs Generator Table of Contents Installation Usage Screenshots Important Notes Requirements Blender 3.0 or newer. Installation: Download a z

Elhanan Flesch 4 May 17, 2022
PyGtk Color - A couple of python scripts to select a color (for scripting usage)

Selection Scripts This repository contains two scripts to be used within a scripting project, to aquire a color value. Both scripts requir

Spiros Georgaras 1 Oct 31, 2021
SGTL - Spectral Graph Theory Library

SGTL - Spectral Graph Theory Library SGTL is a python library of spectral graph theory methods. The library is still very new and so there are many fe

Peter Macgregor 6 Oct 01, 2022
thumbor is an open-source photo thumbnail service by globo.com

Survey If you use thumbor, please take 1 minute and answer this survey? It's only 2 questions and one is multiple choice!!! thumbor is a smart imaging

Thumbor (by @globocom) 9.3k Dec 31, 2022
FrostedGlass is a translucent frosted glass effect widget, that creates a context with the background behind it.

FrostedGlass FrostedGlass is a translucent frosted glass effect widget, that creates a context with the background behind it. The effect is drawn on t

Kivy Garden 24 Dec 10, 2022
Maze generator with most popular shapes - hexagon, triangle, square

Maze-Generator Maze generator with most popular shapes - hexagon, triangle, square (sqaure not implemented yet): Theory: Planar Graph https://en.wikip

Kacper Plesiak 2 Dec 28, 2021
A sketch like(?) effect for images

lineArt A sketch like(?) effect for images How to run main.py [filename] [option {1,2}] option 1 retains colour option 2 gives gray image #results ori

1 Oct 28, 2021
Image Compression GUI APP Python: PyQt5

Image Compression GUI APP Image Compression GUI APP Python: PyQt5 Use : f5 or debug or simply run it on your ids(vscode , pycham, anaconda etc.) socia

Sourabh Dhalia 1 May 21, 2022
QR Code Generator

In this project, we'll be using some libraries to instantly generate authentic QR Codes and export them in various formats

Hassan Shahzad 3 Jun 02, 2022
Hacking github graph with a easy python script

Hacking-Github-Graph Hacking github graph with a easy python script Requirements git latest version installed. A text editor (eg: vs code, sublime tex

SENPAI LEGEND 1 Nov 01, 2021
Image-Viewer is a Windows image viewer based on Python 3.

Image-Viewer Hi! Image-Viewer is a Windows image viewer based on Python 3. Using You must download Image-Viewer.exe from the root of the repository. T

2 Apr 18, 2022
Image Processing - Make noise images clean

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

2 Aug 04, 2022
Fill holes in binary 2D & 3D images fast.

Fill holes in binary 2D & 3D images fast.

11 Dec 09, 2022
An agnostic Canvas API for the browser-less and insane

Apollo An agnostic Canvas API for the browser-less and mildly insane. Project Apollo is a Pythonic re-imagining of HTML Canvas element implementati

1 Jan 13, 2022
Plots is a graph plotting app for GNOME.

Plots is a graph plotting app for GNOME. Plots makes it easy to visualise mathematical formulae. In addition to basic arithmetic operations, it supports trigonometric, hyperbolic, exponential and log

Alex Huntley 138 Dec 14, 2022