Giter VIP home page Giter VIP logo

diffsketcher's Introduction

DiffSketcher: Text Guided Vector Sketch Synthesis through Latent Diffusion Models

NeurIPS ArXiv Website Demo

This repository contains our official implementation of the NeurIPS 2023 paper: DiffSketcher: Text Guided Vector Sketch Synthesis through Latent Diffusion Models, which can generate high-quality vector sketches based on text prompts.

Our Project Page: https://ximinng.github.io/DiffSketcher-project/

teaser1 teaser2

DiffSketcher Rendering Process:

Prompt: Macaw full color, ultra detailed, realistic, insanely beautiful Prompt: Very detailed masterpiece painting of baby yoda hoding a lightsaber Prompt: Sailboat sailing in the sea on a clear day

๐Ÿ†• Update

  • [01/2024] ๐Ÿ”ฅ We released the SVGDreamer. SVGDreamer is a novel text-guided vector graphics synthesis method. This method considers both the editing of vector graphics and the quality of the synthesis.
  • [12/2023] ๐Ÿ”ฅ We released the PyTorch-SVGRender. Pytorch-SVGRender is the go-to library for state-of-the-art differentiable rendering methods for image vectorization.
  • [11/2023] We thank @camenduru for implementing the DiffSketcher-colab.
  • [10/2023] We released the DiffSketcher code.
  • [10/2023] We released the VectorFusion code.

๐Ÿ”ง Installation

Step by step

Create a new conda environment:

conda create --name diffsketcher python=3.10
conda activate diffsketcher

Install pytorch and the following libraries:

conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
pip install omegaconf BeautifulSoup4
pip install opencv-python scikit-image matplotlib visdom wandb
pip install triton numba
pip install numpy scipy timm scikit-fmm einops
pip install accelerate transformers safetensors datasets

Install CLIP:

pip install ftfy regex tqdm
pip install git+https://github.com/openai/CLIP.git

Install diffusers:

pip install diffusers==0.20.2

Install xformers (require python=3.10):

conda install xformers -c xformers

Install diffvg:

git clone https://github.com/BachiLi/diffvg.git
cd diffvg
git submodule update --init --recursive
conda install -y -c anaconda cmake
conda install -y -c conda-forge ffmpeg
pip install svgwrite svgpathtools cssutils torch-tools
python setup.py install

Docker Usage

docker run --name diffsketcher --gpus all -it --ipc=host ximingxing/svgrender:v1 /bin/bash

๐Ÿ”ฅ Quickstart

Case: Sydney Opera House

Preview:

Attention Map Control Points Init Strokes Initialization 100 step 500 step

From the abstract to the concrete:

16 Paths 36 Paths 48 Paths 96 Paths 128 Paths

Script:

python run_painterly_render.py \
  -c diffsketcher.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=4 num_paths=96 num_iter=800" \
  -pt "a photo of Sydney opera house" \
  -respath ./workdir/sydney_opera_house \
  -d 8019 \
  --download
  • -c a.k.a --config: configuration file, saving in DiffSketcher/config/.
  • -eval_step: the step size used to eval the method (too frequent calls will result in longer times).
  • -save_step: the step size used to save the result (too frequent calls will result in longer times).
  • -update: a tool for editing the hyper-params of the configuration file, so you don't need to create a new yaml.
  • -pt a.k.a --prompt: text prompt.
  • -respath a.k.a --results_path: the folder to save results.
  • -d a.k.a --seed: random seed.
  • --download: download models from huggingface automatically when you first run them.

crucial:

  • -update "token_ind=4" indicates the index of cross-attn maps to init strokes.
  • -update "num_paths=96" indicates the number of strokes.

optional:

  • -npt, a.k.a --negative_prompt: negative text prompt.
  • -mv, a.k.a --make_video: make a video of the rendering process (it will take much longer).
  • -frame_freq, a.k.a --video_frame_freq: the interval of the number of steps to save the image.
  • -framerate, a.k.a --video_frame_rate: control the playback speed of the output video.
  • Note: Download U2Net model and place in checkpoint/ dir if xdog_intersec=True
  • add enable_xformers=True in -update to enable xformers for speeding up.
  • add gradient_checkpoint=True in -update to use gradient checkpoint for low VRAM.

Case: Sydney Opera House in ink painting style

Preview:

Strokes Initialization 100 step 200 step 990 step

Script:

python run_painterly_render.py \
  -c diffsketcher-width.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=4 num_paths=48 num_iter=800" \
  -pt "a photo of Sydney opera house" \
  -respath ./workdir/sydney_opera_house_ink \
  -d 8019 \
  --download

Oil Painting

Preview:

Strokes Initialization 100 step 570 step

Script:

python run_painterly_render.py \
  -c diffsketcher-color.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
  -pt "portrait of latin woman having a spiritual awaking, eyes closed, slight smile, illuminating lights, oil painting, by Van Gogh" \
  -npt "text, signature, title, heading, watermark, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, out of frame, ugly, extra limbs, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, mutated hands, fused fingers, too many fingers, long neck" \
  -respath ./workdir/latin_woman_portrait -d 58548

Preview:

Strokes Initialization 100 step 570 step

Script:

python run_painterly_render.py \
  -c diffsketcher-color.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
  -pt "a painting of a woman with a crown on her head, art station front page, dynamic portrait style, many colors in the background, olpntng style, oil painting, forbidden beauty" \
  -npt "2 heads, 2 faces, cropped image, out of frame, draft, deformed hands, twisted fingers, double image, malformed hands, multiple heads, extra limb, ugly, poorly drawn hands, missing limb, disfigured, cut-off, ugly, grain, low-res, Deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, floating limbs, disconnected limbs, disgusting, poorly drawn, mutilated, mangled, extra fingers, duplicate artifacts, morbid, gross proportions, missing arms, mutated hands, mutilated hands, cloned face, malformed, blur haze" \
  -respath ./workdir/woman_with_crown -d 178351

Preview:

Strokes Initialization 100 step 420 step

Script:

python run_painterly_render.py \
  -c diffsketcher-color.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=5 num_paths=1000 num_iter=1000 guidance_scale=7.5" \
  -pt "a painting of a woman with a crown on her head, art station front page, dynamic portrait style, many colors in the background, olpntng style, oil painting, forbidden beauty" \
  -npt "2 heads, 2 faces, cropped image, out of frame, draft, deformed hands, twisted fingers, double image, malformed hands, multiple heads, extra limb, ugly, poorly drawn hands, missing limb, disfigured, cut-off, ugly, grain, low-res, Deformed, blurry, bad anatomy, disfigured, poorly drawn face, mutation, mutated, floating limbs, disconnected limbs, disgusting, poorly drawn, mutilated, mangled, extra fingers, duplicate artifacts, morbid, gross proportions, missing arms, mutated hands, mutilated hands, cloned face, malformed, blur haze" \
  -respath ./workdir/woman_with_crown -d 178351

Colorful Results

Preview:

Strokes Initialization 100 step 340 step

Script:

python run_painterly_render.py \
  -c diffsketcher-color.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=5 num_paths=1000 num_iter=800 guidance_scale=7" \
  -pt "a beautiful snow-covered castle, a stunning masterpiece, trees, rays of the sun, Leonid Afremov" \
  -npt "poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face" \
  -respath ./workdir/castle -d 370880

Preview:

Strokes Initialization 100 step 850 step

Script:

python run_painterly_render.py \
  -c diffsketcher-color.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=5 num_paths=1000 num_iter=800 guidance_scale=7" \
  -pt "a beautiful snow-covered castle, a stunning masterpiece, trees, rays of the sun, Leonid Afremov" \
  -npt "poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face" \
  -respath ./workdir/castle -d 478376

DiffSketcher + Style Transfer

Preview:

Generated sample Style Image Result

Script:

python run_painterly_render.py \
  -tk style-diffsketcher -c diffsketcher-style.yaml \
  -eval_step 10 -save_step 10 \
  -update "token_ind=4 num_paths=2000 style_warmup=0 style_strength=1 softmax_temp=0.4 sds.grad_scale=0 lr_scheduler=True num_iter=2000" \
  -pt "The French Revolution, highly detailed, 8k, ornate, intricate, cinematic, dehazed, atmospheric, oil painting, by Van Gogh" \
  -style ./img/starry.jpg \
  -respath ./workdir/style_transfer \
  -d 876809
  • -style: the path of style img place.
  • style_warmup: add style loss after style_warmup step.
  • style_strength: How strong the style should be. 100 (max) is a lot. 0 (min) is no style.

More Sketch Results

check the Examples.md for more cases.

TODO

  • Add a webUI demo.
  • Add support for colorful results and oil painting.

๐Ÿ“š Acknowledgement

The project is built based on the following repository:

We gratefully thank the authors for their wonderful works.

๐Ÿ“Ž Citation

If you use this code for your research, please cite the following work:

@inproceedings{xing2023diffsketcher,
    title={DiffSketcher: Text Guided Vector Sketch Synthesis through Latent Diffusion Models},
    author={XiMing Xing and Chuang Wang and Haitao Zhou and Jing Zhang and Qian Yu and Dong Xu},
    booktitle={Thirty-seventh Conference on Neural Information Processing Systems},
    year={2023},
    url={https://openreview.net/forum?id=CY1xatvEQj}
}

ยฉ๏ธ Licence

This work is licensed under a MIT License.

diffsketcher's People

Contributors

ximinng avatar zhtjtcz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

diffsketcher's Issues

The location of the stable diffusion?

Hello, as a beginner to generate vector graphics, I am very happy to read your research paper and code, in the configuration of the environment to conduct experiments, I encountered such a problem, would like to ask you where the location of the stable diffusion model should be placed?
QQ20231020-095407

GPU Memory requirement

Wonderful work!
I want to know the minimum GPU memory requirement. I only have a 2080Ti GPU and I failed to run the example with "gradient_checkpoint=True". What parameters can I change to help to reduce the GPU memory? Thanks!

Style file

Hi thanks for this great repo!

Can you explain what the style file does (--style_path argument) ? Is it the same as Stable DIffusion embeddings?

Any way to condition the sketch generation with an existing picture also?

OverflowError: cannot fit 'int' into an index-sized integer

DDIMScheduler {
"_class_name": "DDIMScheduler",
"_diffusers_version": "0.20.2",
"beta_end": 0.012,
"beta_schedule": "scaled_linear",
"beta_start": 0.00085,
"clip_sample": false,
"clip_sample_range": 1.0,
"dynamic_thresholding_ratio": 0.995,
"num_train_timesteps": 1000,
"prediction_type": "epsilon",
"rescale_betas_zero_snr": false,
"sample_max_value": 1.0,
"set_alpha_to_one": false,
"skip_prk_steps": true,
"steps_offset": 1,
"thresholding": false,
"timestep_spacing": "leading",
"trained_betas": null
}

prompt: a photo of Sydney opera house
negative_prompt: None

Traceback (most recent call last):
File "/home/DiffSketcher/run_painterly_render.py", line 129, in
main(args, seed_range)
File "/home/DiffSketcher/run_painterly_render.py", line 48, in main
pipe.painterly_rendering(args.prompt)
File "/home/DiffSketcher/pipelines/painter/diffsketcher_pipeline.py", line 241, in painterly_rendering
target_file, attention_map = self.extract_ldm_attn(prompt)
File "/home/DiffSketcher/pipelines/painter/diffsketcher_pipeline.py", line 120, in extract_ldm_attn
outputs = self.diffusion(prompt=[prompts],
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "/home/DiffSketcher/methods/painter/diffsketcher/ASDS_pipeline.py", line 141, in call
text_embeddings = self._encode_prompt(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py", line 307, in _encode_prompt
text_inputs = self.tokenizer(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 2829, in call
encodings = self._call_one(text=text, text_pair=text_pair, **all_kwargs)
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 2915, in _call_one
return self.batch_encode_plus(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3106, in batch_encode_plus
return self._batch_encode_plus(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils.py", line 807, in _batch_encode_plus
batch_outputs = self._batch_prepare_for_model(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils.py", line 879, in _batch_prepare_for_model
batch_outputs = self.pad(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3313, in pad
outputs = self._pad(
File "/home/anaconda3/envs/diffsketcher/lib/python3.10/site-packages/transformers/tokenization_utils_base.py", line 3682, in _pad
encoded_inputs["attention_mask"] = encoded_inputs["attention_mask"] + [0] * difference
OverflowError: cannot fit 'int' into an index-sized integer
Sorry to bother you,
I want to know why the error occurred. Is it because my GPU memory is not enough? Considering that I only have a 2080๏ผŸor other reasons?

้ƒจ็ฝฒ้—ฎ้ข˜==

ๆˆ‘ๅœจdocker ้‡Œ่ฟ่กŒ้‡ๅˆฐไบ†้—ฎ้ข˜ใ€‚ใ€‚ใ€‚

(diffsketcher) root@c3180851e28d:/diffvg# python setup.py install
running install
/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

    ********************************************************************************
    Please avoid running ``setup.py`` directly.
    Instead, use pypa/build, pypa/installer or other
    standards-based tools.

    See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
    ********************************************************************************

!!
self.initialize_options()
/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/cmd.py:66: EasyInstallDeprecationWarning: easy_install command is deprecated.
!!

    ********************************************************************************
    Please avoid running ``setup.py`` and ``easy_install``.
    Instead, use pypa/build, pypa/installer or other
    standards-based tools.

    See https://github.com/pypa/setuptools/issues/917 for details.
    ********************************************************************************

!!
self.initialize_options()
running bdist_egg
running egg_info
writing diffvg.egg-info/PKG-INFO
writing dependency_links to diffvg.egg-info/dependency_links.txt
writing requirements to diffvg.egg-info/requires.txt
writing top-level names to diffvg.egg-info/top_level.txt
reading manifest file 'diffvg.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'diffvg.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
running build_ext

CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
Traceback (most recent call last):
File "/diffvg/setup.py", line 92, in
setup(name = 'diffvg',
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/init.py", line 103, in setup
return distutils.core.setup(**attrs)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 185, in setup
return run_commands(dist)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
dist.run_commands()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
self.run_command(cmd)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/dist.py", line 989, in run_command
super().run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
cmd_obj.run()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/install.py", line 84, in run
self.do_egg_install()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/install.py", line 132, in do_egg_install
self.run_command('bdist_egg')
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
self.distribution.run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/dist.py", line 989, in run_command
super().run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
cmd_obj.run()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/bdist_egg.py", line 167, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/bdist_egg.py", line 153, in call_command
self.run_command(cmdname)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
self.distribution.run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/dist.py", line 989, in run_command
super().run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
cmd_obj.run()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/install_lib.py", line 11, in run
self.build()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/command/install_lib.py", line 111, in build
self.run_command('build_ext')
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/cmd.py", line 318, in run_command
self.distribution.run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/dist.py", line 989, in run_command
super().run_command(command)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
cmd_obj.run()
File "/diffvg/setup.py", line 31, in run
super().run()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/command/build_ext.py", line 88, in run
_build_ext.run(self)
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 345, in run
self.build_extensions()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 467, in build_extensions
self._build_extensions_serial()
File "/opt/conda/envs/diffsketcher/lib/python3.10/site-packages/setuptools/_distutils/command/build_ext.py", line 493, in _build_extensions_serial
self.build_extension(ext)
File "/diffvg/setup.py", line 65, in build_extension
subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env)
File "/opt/conda/envs/diffsketcher/lib/python3.10/subprocess.py", line 369, in check_call
raise CalledProcessError(retcode, cmd)

subprocess.CalledProcessError: Command '['cmake', '/diffvg', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/diffvg/build/lib.linux-x86_64-cpython-310', '-DPYTHON_LIBRARY=/opt/conda/envs/diffsketcher/lib', '-DPYTHON_INCLUDE_PATH=/opt/conda/envs/diffsketcher/include/python3.10', '-DCMAKE_BUILD_TYPE=Release', '-DDIFFVG_CUDA=0']' returned non-zero exit status 1.

About training

Hello, dear author, thank you very much for your answers to the questions I asked before. Now I have run through the code and have also learned the code. But the question remains, is this code only used to draw sketch vectors? What does the code look like when calculating the loss function against the label? I would appreciate it if you could answer this question! Best wishes!

Running on Mac M1 Max

I have a MBP M1 Max that should be able to run this (in theory) using the mps backend but am struggling. By default, the diffvg is being run with use_gpu=True hardcoded inside diffsketcher_pipeline.py (init_diffvg call). There is no CUDA support in diffvg, and it doesn't seem easy to just have diffvg use the mps device (if you know a way, that would be very helpful). After setting this variable to False so that diffvg is initialized with CPU, I get another error that the model expects all tensors to use the same device (now that the first step uses mps and the second uses cpu).

To fix, I can pass -cpu flag when running the main python script, but then the image is generated extremely slowly. Can we somehow make it use mps for the first phase, then switch device to cpu for remainder of work if CUDA is not supported?

EDIT: It seems there is some memory constraint that occurs when trying to use a full -cpu pipeline, as it just faults and stops without a clear error. My next question would be, perhaps we could split the work up: first I run the mps phase for generating the image, then I re-run a new script to run the second phase with model set to a new cpu device for diffvg.

opacity settings

Thanks for your job. I want to generate balck and white sketches, but when I modify 'optim_opacity' in diffsketcher.yaml, the result is very bad. I think there might be wrong with the parameter.

Color Strokes & Oil Painting

Hi there, thanks for releasing all this code and the simple setup instructions.

I'm curious about the colourful and oil painting results on the project page. Is it already achievable with the current state of this repo? Or are there missing features that need to be added as per the TODOs?

typeerror during installation

Cannot get this part installed. The clone and submodule works, but the setup fails. If anyone can build a whl for diffvg I would be super happy

I get this error when trying to build a WHL
'-DPYTHON_LIBRARY=' + get_config_var('LIBDIR'), TypeError: can only concatenate str (not "NoneType") to str

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.