diffvg
Differentiable Rasterizer for Vector Graphics https://people.csail.mit.edu/tzumao/diffvg
diffvg is a differentiable rasterizer for 2D vector graphics. See the webpage for more info.
Install
git submodule update --init --recursive
conda install -y pytorch torchvision -c pytorch
conda install -y numpy
conda install -y scikit-image
conda install -y -c anaconda cmake
conda install -y -c conda-forge ffmpeg
pip install svgwrite
pip install svgpathtools
pip install cssutils
pip install numba
pip install torch-tools
pip install visdom
python setup.py install
Install using poetry
prerequisite
install python 3.7, poetry and ffmpeg
# install poetry (mac, linux)
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
# install ffmpeg
(macos)
brew install ffmpeg
(linux)
sudo apt install ffmpeg
or use conda
conda install -y -c conda-forge ffmpeg
Install python packages
# install all python dependencies
poetry install
# install pydiffvg
poetry run python setup.py install
Now to run the apps, just add poetry run
before each of the commands below, e.g.
poetry run python single_circle.py
Building in debug mode
python setup.py build --debug install
Run
cd apps
Optimizing a single circle to a target.
python single_circle.py
Finite difference comparison.
finite_difference_comp.py [-h] [--size_scale SIZE_SCALE]
[--clamping_factor CLAMPING_FACTOR]
[--use_prefiltering USE_PREFILTERING]
svg_file
e.g.,
python finite_difference_comp.py imgs/tiger.svg
Interactive editor
python svg_brush.py
Painterly rendering
painterly_rendering.py [-h] [--num_paths NUM_PATHS]
[--max_width MAX_WIDTH] [--use_lpips_loss]
[--num_iter NUM_ITER] [--use_blob]
target
e.g.,
python painterly_rendering.py imgs/fallingwater.jpg --num_paths 2048 --max_width 4.0 --use_lpips_loss
Image vectorization
python refine_svg.py [-h] [--use_lpips_loss] [--num_iter NUM_ITER] svg target
e.g.,
python refine_svg.py imgs/flower.svg imgs/flower.jpg
Seam carving
python seam_carving.py [-h] [--svg SVG] [--optim_steps OPTIM_STEPS]
e.g.,
python seam_carving.py imgs/hokusai.svg
Vector variational autoencoder & vector GAN:
For the GAN models, see apps/generative_models/train_gan.py
. Generate samples from a pretrained using apps/generative_models/eval_gan.py
.
For the VAE models, see apps/generative_models/mnist_vae.py
.
If you use diffvg in your academic work, please cite
@article{Li:2020:DVG,
title = {Differentiable Vector Graphics Rasterization for Editing and Learning},
author = {Li, Tzu-Mao and Luk\'{a}\v{c}, Michal and Gharbi Micha\"{e}l and Jonathan Ragan-Kelley},
journal = {ACM Trans. Graph. (Proc. SIGGRAPH Asia)},
volume = {39},
number = {6},
pages = {193:1--193:15},
year = {2020}
}