FL Paper Drawn
A GPU-shader pencil-sketch effect, not a filter preset
- image
- mask
- IMAGE
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) andsamp_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_widthandvignette- 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.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| envelope_jsonopt | STRING | — | |
| blend_intensityopt | FLOAT | 1.000–2 | — |
| invertopt | BOOLEAN | false | — |
| maskopt | IMAGE | — | |
| angle_numopt | FLOAT | 31–10 | — |
| samp_numopt | FLOAT | 2.21–10 | — |
| line_widthopt | FLOAT | 1.00.1–10 | — |
| vignetteopt | FLOAT | 0.00–1 | — |
| fpsopt | INT | 301–120 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |