Skip to main content

memethesis-cli

Upload Python Package Donate using Liberapay

Updates in 3.0.0-beta

Automation has reached a new level where all existing formats are fully automated by memethesizers for their respective compositions, including single, vertical, and horizontal. Adding new formats are now easier than ever, which is why this repo is open to issues and PR's for new formats, instead of the author writing new scripts for each one of them because everyone has limited energy. If you would like a new format and could afford the time and effort to provide the data, please open a PR; if you cannot, open an issue. The former type of contributors should pay attention to such issues, and help with them when possible.

Help

Installing

$ cd ~ # use $HOME
$ git clone https://github.com/fakefred/memethesis-cli # will clone the git repo
$ cd memethesis-cli # will go into directory
$ python3 setup.py bdist_wheel  # will generate .whl
$ pip3 install dist/memethesis* # will install the newly-created memethesis.whl created above

Usage

This part assumes you have a working python 3.x environment, which python refers to. If your OS uses python3, you are smart enough.

$ memethesis -h
Memethesis CLI - All Your Memes Are Belong To Us!

arguments:
  -h, --help            show this help message and exit
  -l, --list            show a list of meme formats and exit
  -i, --interactive     interactive mode (certain formats only)

  -f, --format FORMAT   the meme format to use
  -c, --caption CAPTION caption text to add above your meme
  --font FONT           the font to use for body panels

  -o, --output OUTPUT   save the meme as (jpg/png)
  -p, --preview         display meme without saving it,
                        unless -o/--output is specified

usage:
  # command mode
  $ memethesis -f FORMAT [-p|-o filename] --flag0 TEXT0 --flag1 TEXT1 ...

  # remember to wrap spaced strings in quotes
  # example:
  $ memethesis -f drake -o meme.png --dislike 'one thing' --like 'another thing'

  # interactive mode
  $ memethesis -i

Guide for new formats

cd to ./memethesis/meme/res/template. Create a directory named after your meme. Create format.yml inside the dir you created.

formats.yml

Canonical documentation

# Keywords wrapped in <square brackets> are to be modified on demand;
# others are hardcoded. Starred (*) keywords are optional.
<name>:  # The flag you use for the meme format
# For example, if you name it 'drake' it is accessed via '-f drake'
  composition: vertical|horizontal|single
  # Denotes how the meme is made: stacked top to bottom,
  # laid side by side, or a single panel
  # Respective examples: drake, womanyelling, pigeon
  panels:
    # ^ When composition == 'single', things put here
    # are textboxes instead of panels, which are pasted on one panel
    <name>:  # < Flag for this panel/textbox
    # For example, if you named your panel/textbox 'dislike'
    # it is accessed via '--dislike <text>'
    # Make your panel/textbox as unique as possible,
    # and if you can, make it short and descriptive.
    # IMPORTANT: flag names CAN collide. Make your flag different from
    # all others.
      description*: <description>
      # ^ Shown in --list and, if the composition is not single,
      # in --interactive
      image: <dir>/<image>
      # ^ Image path relative to ./memethesis/meme/res/template/
      textbox: [370, 12, 400, 250]
      # ^ Textbox position, in left, top, width, height
      font*: notosans|notosansmono|impact|comicsans
      # ^ Default font for the template
      # (memethesis assumes notosans if none; see `fonts.py`)
      # Overridden when '--font' is specified in command mode
      style*: stroke
      # ^ Use 'stroke' if default font is impact for best effects
    <name>:
      # ...
    # ...
<name>:  # You can combine multiple templates into one dir,
# but only do that when they're relevant and inseparable
# ...

Example

Here is an tested example, from the drake format:

drake:
  composition: vertical
  panels:
    dislike:
      description: Drake dislike
      image: drake/drake_dislike.jpg
      textbox: [370, 12, 400, 250]
    like:
      description: Drake like
      image: drake/drake_like.jpg
      textbox: [370, 20, 400, 250]

Here are a few points to follow:

  • Make the directory and files distinguishable from others or potential ones: for example, spiderman serves as a poor identifier for meme formats because there are countless spiderman memes.
  • Keep the image resolution moderately high. 800px wide is enough. Don't scale up too much.
  • Don't include whitespace in filenames and yml keywords.
  • Use lower case as default, unless capital ones are necessary.
  • Test before opening a PR. Ensure the textboxes are right by feeding it long strings like 'mm mm mm mm mm mm mm mm mm mm mm mm mm mm mm mm'. I will clone your fork and test personally.
  • If you ensure the test passes, add a command you use to test your format to test.sh in the root dir of the project.

Debugging

[make edits]
# to test by running module
$ python -m memethesis.__main__ [args]
# to test all formats with shell script
$ sudo chmod +x test.sh
$ ./test.sh
# to test by installing wheel
$ python setup.py bdist_wheel  # will generate .whl
$ pip install dist/memethesis-[something].whl

Release files for memethesis 3.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for memethesis 3.2.1
File Size Uploaded
memethesis-3.2.1.tar.gz 2.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for memethesis 3.2.1
File Interpreter ABI Platform
memethesis-3.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 5.4 MB

Release files / memethesis-3.2.1.tar.gz

Download URL memethesis-3.2.1.tar.gz
Size 2.7 MB
Tags Source
SHA-256 checksum
How to use checksums
92ef4f4b5c30f020d9cc96e46199ba6143cd97b3ed0e4d6c5aae5315087360c8
BLAKE2b-256 checksum
How to use checksums
5b9de82b59421c5c2cbd68b08a736ad297ac0f7508ddab7751a7bf60968e016d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1

Release files / memethesis-3.2.1-py3-none-any.whl

Download URL memethesis-3.2.1-py3-none-any.whl
Size 2.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f86c468ae5c239affa3b912093f4cb245e1e76dc1b8f35e3c0e9e9dfdd7746e4
BLAKE2b-256 checksum
How to use checksums
78e39d0b3b4a685bfe4a27087b5f0c047e319acf13acba3fc52e3f90a012e734
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1

Release history Release notifications | RSS feed

This release

3.2.1 This release

2 release files

3.2.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page