Hi, good question. So this should certainly be possible to do with ITensor. The way to handle the momentum quantum number should be that label the allowed y-periodic momenta by integers, then create a "slot" in the QNs which you set up to have a ZN addition rule, where N is the maximum allowed momentum (dependent on the transverse system size Ly of course).
This paper which you've probably seen has some helpful details:
https://arxiv.org/abs/1512.03318
To set up the QNs, you can do something like this:
First site IQIndex along a column of your cylinder (qn values are spin, charge, momentum):
IQIndex("S1",Index("e1",1),QN({0,1},{0,-1},{0,Nmax}),
Index("up1",1),QN({1,1},{1,-1},{0,Nmax}),
Index("dn1",1),QN({-1,1},{1,-1},{0,Nmax}),
Index("ud1",1),QN({0,1},{2,-1},{0,Nmax}))
Second site IQIndex
IQIndex("S1",Index("e1",1),QN({0,1},{0,-1},{1,Nmax}),
Index("up1",1),QN({1,1},{1,-1},{1,Nmax}),
Index("dn1",1),QN({-1,1},{1,-1},{1,Nmax}),
Index("ud1",1),QN({0,1},{2,-1},{1,Nmax}))
To understand the notation inside the QN better, see the QN documentation page:
http://itensor.org/docs.cgi?page=classes/qn