rewbs / sd-parseq

Parameter sequencer for Stable Diffusion
https://sd-parseq.web.app/
MIT License
356 stars 38 forks source link

Precedence bug with if expressions #170

Open rewbs opened 1 year ago

rewbs commented 1 year ago

if true 10 else 5/2 evaluates as (if true 10 else 5)/2, instead of if true 10 else (5/2) .

sashaagafonoff commented 11 months ago

yes! I finally worked this out with an issue i've been having for a while with conditional statements:

the offending statement: if (f-info_match_prev("scene")<4) 0.9 else 0.55 - pulse(p=3b,a=0.075,pw=2)

image

the fix: if (f-info_match_prev("scene")<4) 0.9 else (0.55 - pulse(p=3b,a=0.075,pw=2))

image

Easy workaround (enclose your blocks in parentheses).

I think correct behaviour should be that IF you did want a dangling operation at the end (i.e. it applies regardless of truth/falsity), you'd enclose the entire conditional statement in parentheses

e.g. (if (f-info_match_prev("scene")<4) 0.9 else 0.55) - pulse(p=3b,a=0.075,pw=2)