← circus
Effects
Gradients - Pattern - Filter
Python Code
from dataclasses import replace
from svan2d.component.effect.filter.drop_shadow import DropShadowFilter
from svan2d.component.effect.gradient.gradient_stop import GradientStop
from svan2d.component.effect.gradient.linear import LinearGradient
from svan2d.component.effect.pattern.checkerboard import CheckerboardPattern
from svan2d.component.state.circle import CircleState
from svan2d.component.state.square import SquareState
from svan2d.converter.converter_type import ConverterType
from svan2d.core.logger import configure_logging
from svan2d.core.point2d import Point2D
from svan2d.velement import VElement
from svan2d.vscene import VScene
from svan2d.vscene.vscene_exporter import VSceneExporter
from svan2d.component import PathState, PathRenderer
from svan2d.core.color import Color
configure_logging(level="INFO")
START_COLOR_1 = Color("#FDBE02")
END_COLOR_1 = Color("#AA0000")
START_COLOR_2 = Color("#00AAAA")
END_COLOR_2 = Color("#0000FF")
# Create the scene
scene = VScene(width=256, height=256, background=Color("#000017"))
linear_grad_1 = LinearGradient(
Point2D(0, -50),
Point2D(0, 50),
stops=(
GradientStop(0.0, START_COLOR_1),
GradientStop(1.0, END_COLOR_1),
),
)
linear_grad_2 = replace(
linear_grad_1,
stops=(
GradientStop(0.0, START_COLOR_2),
GradientStop(1.0, END_COLOR_2),
),
)
shadow_filter_1 = DropShadowFilter(dx=3, dy=3, std_deviation=3, color=START_COLOR_1)
shadow_filter_2 = replace(shadow_filter_1, color=END_COLOR_1)
checker_pattern_1 = CheckerboardPattern(
square_size=5, color1=Color("#34495e"), color2=Color("#ffffff")
)
checker_pattern_2 = replace(checker_pattern_1, square_size=25, color1=Color("#ff0000"))
start_states = [
SquareState(size=40, pos=Point2D(-70, -70), fill_gradient=linear_grad_1),
SquareState(size=40, pos=Point2D(-70, 0), fill_pattern=checker_pattern_1),
SquareState(
size=40, pos=Point2D(-70, 70), fill_color=START_COLOR_1, filter=shadow_filter_1
),
]
end_states = [
CircleState(radius=20, pos=Point2D(70, -70), fill_gradient=linear_grad_2),
CircleState(radius=20, pos=Point2D(70, 0), fill_pattern=checker_pattern_2),
CircleState(
radius=20, pos=Point2D(70, 70), fill_color=END_COLOR_1, filter=shadow_filter_2
),
]
elements = [VElement(keystates=[s1, s2]) for s1, s2 in zip(start_states, end_states)]
# Add all elements to the scene
scene.add_elements(elements)
# Create the exporter
exporter = VSceneExporter(
scene=scene,
converter=ConverterType.PLAYWRIGHT,
output_dir="output/",
)
# Export to mp4
exporter.to_mp4(
filename="effects",
total_frames=60,
framerate=30,
png_width_px=1024,
)