From 81d487f8b2013f4e154e01df53f9a57c524ab78c Mon Sep 17 00:00:00 2001 From: hjh Date: Thu, 11 Jun 2026 12:11:49 +0800 Subject: [PATCH] Add phase vortex quantum brush --- effect/phasevortex/README.md | 30 ++++ effect/phasevortex/__init__.py | 1 + effect/phasevortex/docs/after.png | Bin 0 -> 72849 bytes effect/phasevortex/docs/before.png | Bin 0 -> 1365 bytes effect/phasevortex/phasevortex.py | 154 ++++++++++++++++++ .../phasevortex/phasevortex_requirements.json | 56 +++++++ 6 files changed, 241 insertions(+) create mode 100644 effect/phasevortex/README.md create mode 100644 effect/phasevortex/__init__.py create mode 100644 effect/phasevortex/docs/after.png create mode 100644 effect/phasevortex/docs/before.png create mode 100644 effect/phasevortex/phasevortex.py create mode 100644 effect/phasevortex/phasevortex_requirements.json diff --git a/effect/phasevortex/README.md b/effect/phasevortex/README.md new file mode 100644 index 0000000..4376636 --- /dev/null +++ b/effect/phasevortex/README.md @@ -0,0 +1,30 @@ +# Phase Vortex Brush + +Phase Vortex is a stroke-following interference brush for Quantum Brush. It treats the user's stroke as a phase object inside a balanced Mach-Zehnder interferometer: every affected pixel receives a relative phase, and the output intensity follows the single-photon interference probability `P = (1 + V cos(phi)) / 2`. + +The result is a set of coherent color and brightness fringes that bend around the stroke. The `Winding` control adds an orbital-angular-momentum-like phase term, turning straight fringes into vortex patterns around the clicked or drawn region. + +## Parameters + +- `Radius`: width of the affected region around the stroke. +- `Fringe Spacing`: distance between interference bands. +- `Winding`: angular phase circulation; positive and negative values swirl in opposite directions. +- `Strength`: how strongly the computed interference pattern is blended into the image. +- `Hue Shift`: how much the bright and dark ports push hue in opposite directions. +- `Coherence`: fringe visibility. Lower values mimic decoherence by flattening the pattern. + +## Quantum Background + +A balanced Mach-Zehnder interferometer splits a quantum amplitude into two paths and recombines it. A relative phase `phi` between the paths changes the probability of detecting the particle at either output port. This brush maps path distance, stroke direction, and angular winding into that phase, then uses the resulting probability field as a visual transformation. + +High coherence gives sharp interference fringes. Low coherence washes them out, similar to losing phase information through environmental noise. + +## Creative Use + +Phase Vortex works well on long curved strokes, spirals, and circular gestures. It can create water-like caustics, energy halos, or orbital ripples while preserving the original image texture underneath. For subtle effects, lower `Strength` and `Hue Shift`; for a visible quantum-poster look, increase `Winding` and `Coherence`. + +## Files + +- `phasevortex.py`: brush implementation. +- `phasevortex_requirements.json`: Quantum Brush parameter metadata. +- `docs/before.png` and `docs/after.png`: generated example images. diff --git a/effect/phasevortex/__init__.py b/effect/phasevortex/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/effect/phasevortex/__init__.py @@ -0,0 +1 @@ + diff --git a/effect/phasevortex/docs/after.png b/effect/phasevortex/docs/after.png new file mode 100644 index 0000000000000000000000000000000000000000..f788b288738e4adaefd5e45dc0b08c6f9176be68 GIT binary patch literal 72849 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 0: + return clicks + if len(path) == 0: + return np.empty((0, 2), dtype=float) + return np.array([path[0], path[len(path) // 2], path[-1]], dtype=float) + + +def _nearest_path_distance(region, path, max_points=500): + if len(path) == 0: + return np.zeros(len(region), dtype=float) + + if len(path) > max_points: + sample_idx = np.linspace(0, len(path) - 1, max_points).astype(int) + path = path[sample_idx] + + # Batched squared distances keep the brush responsive on large strokes. + distances = np.empty(len(region), dtype=float) + batch = 2048 + for start in range(0, len(region), batch): + stop = start + batch + delta = region[start:stop, None, :] - path[None, :, :] + distances[start:stop] = np.sqrt(np.min(np.sum(delta * delta, axis=2), axis=1)) + return distances + + +def _mach_zehnder_probability(phase, coherence): + # A single photon entering a balanced Mach-Zehnder interferometer exits one + # port with P = (1 + V cos(phi)) / 2. Coherence acts as fringe visibility. + return 0.5 + 0.5 * np.clip(coherence, 0.0, 1.0) * np.cos(phase) + + +def _phase_field(region, path, anchors, radius, fringe_spacing, winding): + center = anchors.mean(axis=0) if len(anchors) else path[len(path) // 2] + rel = region.astype(float) - center + angle = np.arctan2(rel[:, 0], rel[:, 1]) + radial = np.sqrt(np.sum(rel * rel, axis=1)) + path_dist = _nearest_path_distance(region, path) + + stroke_axis = path[-1] - path[0] if len(path) > 1 else np.array([1.0, 0.0]) + norm = np.linalg.norm(stroke_axis) + if norm < 1e-6: + stroke_axis = np.array([1.0, 0.0]) + norm = 1.0 + stroke_axis = stroke_axis / norm + momentum = (region.astype(float) - center) @ stroke_axis / max(fringe_spacing, 1e-6) + + vortex = winding * angle + ripples = 2 * np.pi * (path_dist / max(fringe_spacing, 1e-6)) + envelope = np.clip(1.0 - path_dist / max(radius, 1), 0.0, 1.0) + radial_chirp = 0.35 * np.sqrt(radial / max(radius, 1)) + phase = ripples + vortex + momentum + radial_chirp + return phase, envelope + + +def run(params): + image = params["stroke_input"]["image_rgba"].copy() + assert image.shape[-1] == 4, "Image must be RGBA format" + + path = _safe_path(params["stroke_input"].get("path", [])) + if len(path) == 0: + return image + + radius = int(params["user_input"]["Radius"]) + fringe_spacing = float(params["user_input"]["Fringe Spacing"]) + winding = float(params["user_input"]["Winding"]) + strength = float(params["user_input"]["Strength"]) + hue_shift = float(params["user_input"]["Hue Shift"]) + coherence = float(params["user_input"]["Coherence"]) + + height, width = image.shape[:2] + region = _points_within_radius(path.astype(int), radius, border=(height, width)) + if len(region) == 0: + return image + + # Clipping at the border can duplicate coordinates, so keep each pixel once. + region = np.unique(region, axis=0) + anchors = _anchor_points(path, params["stroke_input"].get("clicks", [])) + phase, envelope = _phase_field(region, path, anchors, radius, fringe_spacing, winding) + probability = _mach_zehnder_probability(phase, coherence) + + selection = image[region[:, 0], region[:, 1]].astype(np.float32) / 255.0 + hls = _rgb_to_hls(selection[..., :3]) + + signed_fringe = (probability - 0.5) * 2.0 + local_strength = strength * envelope + hls[..., 0] = (hls[..., 0] + hue_shift * signed_fringe * local_strength) % 1.0 + hls[..., 1] = np.clip( + hls[..., 1] + 0.28 * signed_fringe * local_strength, + 0.0, + 1.0, + ) + hls[..., 2] = np.clip( + hls[..., 2] * (1.0 + 0.22 * local_strength * np.abs(signed_fringe)), + 0.0, + 1.0, + ) + + rgb = (_hls_to_rgb(hls) * 255).astype(np.uint8) + alpha = selection[..., 3:4] + blended_rgb = ( + selection[..., :3] * (1.0 - local_strength[:, None] * alpha) + + (rgb.astype(np.float32) / 255.0) * (local_strength[:, None] * alpha) + ) + image[region[:, 0], region[:, 1], :3] = np.clip(blended_rgb * 255, 0, 255).astype(np.uint8) + image[region[:, 0], region[:, 1], 3] = np.maximum( + image[region[:, 0], region[:, 1], 3], + (255 * np.clip(local_strength, 0.0, 1.0)).astype(np.uint8), + ) + return image diff --git a/effect/phasevortex/phasevortex_requirements.json b/effect/phasevortex/phasevortex_requirements.json new file mode 100644 index 0000000..204b0e1 --- /dev/null +++ b/effect/phasevortex/phasevortex_requirements.json @@ -0,0 +1,56 @@ +{ + "name": "Phase Vortex", + "id": "phasevortex", + "author": "qdwg with OpenAI Codex", + "version": "1.0.0", + "description": "A Mach-Zehnder-style interference brush that turns stroke geometry into color phase ripples and vortex-like brightness fringes.", + "dependencies": { + "numpy": ">=2.1.0" + }, + "user_input": { + "Radius": { + "type": "int", + "min": 4, + "max": 120, + "default": 36 + }, + "Fringe Spacing": { + "type": "float", + "min": 4.0, + "max": 80.0, + "default": 18.0 + }, + "Winding": { + "type": "float", + "min": -6.0, + "max": 6.0, + "default": 1.5 + }, + "Strength": { + "type": "float", + "min": 0.0, + "max": 1.0, + "default": 0.65 + }, + "Hue Shift": { + "type": "float", + "min": -1.0, + "max": 1.0, + "default": 0.18 + }, + "Coherence": { + "type": "float", + "min": 0.0, + "max": 1.0, + "default": 0.85 + } + }, + "stroke_input": { + "image_rgba": "array", + "path": "array", + "clicks": "array" + }, + "flags": { + "smooth_path": true + } +}