yes, self is for the bridge. Vlans are assigned to bridge interfaces.
master is for interfaces that are slaved to bridge interfaces. You don't need to state the keyword master as it is the default.
Create bridge
/ # ip link add br0 type bridge vlan_filtering 1
/ # ip link set br0 up
/ # bridge vlan
port vlan ids
br0 1 PVID Egress Untagged
Add vlans
/ # bridge vlan add dev br0 vid 10 self
/ # bridge vlan add dev br0 vid 20 self
/ # bridge vlan add dev br0 vid 30 self
/ #
/ # bridge vlan
port vlan ids
br0 1 PVID Egress Untagged
10
20
30
Add eth interfaces as slaves to bridge
/ # ip link set eth0 master br0
/ # ip link set eth1 master br0
/ # ip link set eth2 master br0
/ # bridge vlan
port vlan ids
eth0 1 PVID Egress Untagged
eth1 1 PVID Egress Untagged
eth2 1 PVID Egress Untagged
br0 1 PVID Egress Untagged
10
20
30
clear default vlan from interfaces
/ # bridge vlan del dev eth0 vid 1
/ # bridge vlan del dev eth1 vid 1
/ # bridge vlan del dev eth2 vid 1
/ # bridge vlan
port vlan ids
eth0 None
eth1 None
eth2 None
br0 1 PVID Egress Untagged
10
20
30
add necessary VLANs to the ports
/ # bridge vlan add dev eth0 vid 10 pvid untagged master
/ # bridge vlan add dev eth1 vid 20 pvid untagged master
/ # bridge vlan add dev eth2 vid 30 pvid untagged
/ # bridge vlan
port vlan ids
eth0 10 PVID Egress Untagged
eth1 20 PVID Egress Untagged
eth2 30 PVID Egress Untagged
br0 1 PVID Egress Untagged
10
20
30
as you see I used master keyword for eth0 and eth1, but not for eth2 and it didn't change the outcome.