For future reference, we already have properties like `Range`, which in this scenario should replace `Float`, because after all, `offset` and `scale` are floats limited to a range. Given this, we could have simply `input_specs = ["offset", "scale", "title"]` (preferably even using literals instead of strings, but that isn't so simple) (using default widget based on property type), or even:
````
offset = Slider(Range(Float, start=0.0, end=5.0, default=1.0))
scale = Slider(Range(Float, start=-5.0, end=5.0, default=1.0))
title = TextInput(String("my sin wave"))
```
This way, widget annotated properties would be added to `input_specs` automatically (as we already do in other areas, e.g. data specs). Those properties would later behave as normal properties and normal ones would be also allowed (if we don't want something to get rendered on-screen). Anyway, I'm experimenting with this right now, so maybe I will submit a PR later.