Yes, you can pass the number of input channels using in_channels.
This should work for your dataset:
model = UNet(in_channels=1,
             out_channels=64,
             n_class=3,
             kernel_size=3,
             padding=1,
             stride=1)

in_channels_skip is the number of channels from the block in the downward path which should be concatenated with the other input to the current up block.
So lets take up3 as an example.
This block takes an activation from down3 as its input (in_channels = 8 * out_channels ) and additionally concatenates it with the output of down2 (in_channels_skip = 4 * out_channels ).
So you’ll have 12 * out_channels channels for your conv layer in up3 now, which is why it’s defined in this way:
self.conv_block = BaseConv(
    in_channels=in_channels + in_channels_skip,
...

Does this example make it clear in any way or do you need more information?