Nodes/ComfyUI_Fill-Nodes/FL Paper Drawn
ComfyUI Node

FL Paper Drawn

A GPU-shader pencil-sketch effect, not a filter preset

By filliptm·Created 3 years ago·Updated about 7 hours ago· 628
FL Paper Drawn
  • image
  • mask
  • IMAGE
envelope_json
blend_intensity1.00
invertfalse
angle_num3
samp_num2.2
line_width1.0
vignette0.0
fps30

Plenty of "sketch effect" nodes are just an edge-detect filter with a paper texture blended on top. FL_PaperDrawn does something more deliberate: it renders directional line strokes via an OpenGL fragment shader, analyzing gradients across multiple angles and building up hand-drawn-looking hatching rather than tracing a single edge outline. The result reads more like actual pencil crosshatching than a Photoshop filter, because that's structurally closer to what it's doing.

How it works

For each pixel, the shader samples the image's gradient along a set of directions (angle_num) at a given sampling density (samp_num), and draws line strokes oriented to match the local gradient direction - which is how real pencil hatching works too: your hand naturally follows the contour it's shading. line_width controls stroke thickness, vignette darkens the frame edges for a sketchbook-page feel, and blend_intensity controls how much of the effect gets mixed back over the original versus a pure line-drawing look. An optional mask lets you apply the effect to only part of the image, and invert flips the tonal result if you want light-on-dark instead of dark-on-light strokes.

The inputs and outputs that matter

  • image - the only required input.
  • angle_num (1–10, default 3) and samp_num (1–10, default 2.2) - the two knobs that most directly shape the "hand-drawn" character. More angles means more direction variety in the hatching; higher sampling density means denser, more detailed strokes. Both cost render time as you push them up.
  • blend_intensity (0–2, default 1) - how strongly the effect shows over the source image. Values above 1 push past a straight overlay.
  • line_width and vignette - thickness and edge-darkening, respectively; mostly aesthetic finishing touches once the core hatching looks right.
  • fps - only relevant if you're processing an image sequence rather than a single frame; controls frame-rate-dependent aspects of the shader's animation state.
  • Output: IMAGE - the sketch-effect result.

How to install it

Via ComfyUI Manager: search "ComfyUI_Fill-Nodes" and install. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes

then restart ComfyUI. The one thing worth knowing before you install specifically for this node: it and its VFX-section siblings (FL_InfiniteZoom, FL_Shadertoy) render through OpenGL rather than pure PyTorch/PIL tensor math. That's a real dependency, not a nice-to-have - it needs a working OpenGL context on the machine ComfyUI is running on. On a normal desktop with a GPU driver installed this is transparent; on a headless server or a container without a display/GL context configured, this is exactly the kind of node that can fail to initialize where a plain image-filter node wouldn't.

Common issues & troubleshooting

Fails to load or errors on first run, specifically on a headless box. This is the most likely failure mode for any of this pack's OpenGL/shader-based VFX nodes - check whether you're running ComfyUI on a server without a GPU display context (common on cloud/serverless GPU setups) before assuming the node itself is broken.

Effect looks too subtle or too aggressive. blend_intensity is the fastest lever - push it toward 0 for a light overlay on the original, toward 2 for something closer to a pure line drawing.

Hatching looks uniform/mechanical instead of "hand-drawn." Try varying angle_num - a single angle count tends to produce a repetitive, engraving-like pattern; more angles gives the strokes more natural direction variety.

It's slow on large images or long sequences. samp_num and angle_num both multiply the per-pixel shader work directly - if you're processing a batch or a video sequence, drop both before assuming the node itself is the bottleneck.

Category🏵️Fill Nodes/VFX

Inputs (10)

NameTypeDefaultDescription
imageIMAGE
envelope_jsonoptSTRING
blend_intensityoptFLOAT1.000–2
invertoptBOOLEANfalse
maskoptIMAGE
angle_numoptFLOAT31–10
samp_numoptFLOAT2.21–10
line_widthoptFLOAT1.00.1–10
vignetteoptFLOAT0.00–1
fpsoptINT301–120

Outputs (1)

NameTypeDescription
IMAGEIMAGE