what’s the difference between e.g. optfir.lowpass and gr.firdes.lowpass???

you can use both to design your filters, but:

  • optfir can only do low- and high-pass, while firdes can do low-, high- and band-pass, band-reject, hilbert, RRC and gaussian
  • they take slightly different arguments: firdes lets you specify the type of window, while optfir lets you specify the passband ripple and stopband attenuation

they return the filter taps as a tuple, and you can see the filter length through len(taps)