mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-03-28 04:23:28 +08:00
* CURVE node * remove curve to sigmas node * feat: add CurveInput ABC with MonotoneCubicCurve implementation (#12986) CurveInput is an abstract base class so future curve representations (bezier, LUT-based, analytical functions) can be added without breaking downstream nodes that type-check against CurveInput. MonotoneCubicCurve is the concrete implementation that: - Mirrors frontend createMonotoneInterpolator (curveUtils.ts) exactly - Pre-computes slopes as numpy arrays at construction time - Provides vectorised interp_array() using numpy for batch evaluation - interp() for single-value evaluation - to_lut() for generating lookup tables CurveEditor node wraps raw widget points in MonotoneCubicCurve. * linear curve * refactor: move CurveEditor to comfy_extras/nodes_curve.py with V3 schema * feat: add HISTOGRAM type and histogram support to CurveEditor * code improve --------- Co-authored-by: Christian Byrne <cbyrne@comfy.org>
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from comfy_api.latest import ComfyExtension, io
|
|
from comfy_api.input import CurveInput
|
|
from typing_extensions import override
|
|
|
|
|
|
class CurveEditor(io.ComfyNode):
|
|
@classmethod
|
|
def define_schema(cls):
|
|
return io.Schema(
|
|
node_id="CurveEditor",
|
|
display_name="Curve Editor",
|
|
category="utils",
|
|
inputs=[
|
|
io.Curve.Input("curve"),
|
|
io.Histogram.Input("histogram", optional=True),
|
|
],
|
|
outputs=[
|
|
io.Curve.Output("curve"),
|
|
],
|
|
)
|
|
|
|
@classmethod
|
|
def execute(cls, curve, histogram=None) -> io.NodeOutput:
|
|
result = CurveInput.from_raw(curve)
|
|
|
|
ui = {}
|
|
if histogram is not None:
|
|
ui["histogram"] = histogram if isinstance(histogram, list) else list(histogram)
|
|
|
|
return io.NodeOutput(result, ui=ui) if ui else io.NodeOutput(result)
|
|
|
|
|
|
class CurveExtension(ComfyExtension):
|
|
@override
|
|
async def get_node_list(self):
|
|
return [CurveEditor]
|
|
|
|
|
|
async def comfy_entrypoint():
|
|
return CurveExtension()
|