https://github.com/elmariachi111/niflot

You can mint a NIFLOT

		/** 
     * @param token the currency this Niflot is based on
     * @param origin the source that streams `token` to your account
     * @param durationInSeconds how long this Niflot will run after it's been transferred for the first time
     */
function mint(
        ISuperToken token,
        address origin,
        uint256 durationInSeconds
) external {

Once you mint it, upon transfer of the NFT, the receiver of the NFT starts receiving the stream.

This transfer uses ACL permissions to move the stream.

When the niflot expires (duration passes), the burn function can be called which burns the Niflot NFT and returns the stream to the original holder.

The logic behind what happens in the burns and mints is compartmentalized in the _beforeTokenTransfer hook.