The basic idea of mass migration is pretty simple. While deposit transactions on the layer-1 contract create a MassDeposit object, "Migration" type outputs of transactions can create a MassMigration that constructs a MassDeposit for its destination network.
A transaction can have UTXO, Migration, or Withdrawal type of outputs. To check more details, see "Transaction" page.
In Zkopru, for the migration, there are source network and destination network. Once a mass migration on the source network is finalized(code here), the migrateTo function on the source network can be executed. The function moves the assets, including Ether, ERC20, and ERC721, while creating a MassDeposit object for the destination network.
Therefore, the destination network should implement acceptMigration function. Also, it is recommended to allow migrations only from trusted networks.
The migration standard between rollups is going to be standardized through EIP.