from ij import IJ, WindowManager
from ij.plugin import ImageCalculator
from ij.gui import GenericDialog


gd = GenericDialog('')
gd.addStringField('Frame difference', '2')
gd.addCheckbox('Make overlay?', True)
gd.centerDialog(True)
gd.showDialog()

if gd.wasOKed():

    frame_gap = int(gd.getStringFields()[0].getText())

    calc = ImageCalculator()

    image = IJ.getImage()
    frames = image.getNSlices()
    if frames < 2:
        frames = image.getNFrames()

    range_before = str(frames - frame_gap)
    range_after = str(frame_gap + 1) + '-' + str(frames)

    IJ.run("Duplicate...", "title=before duplicate range=1-" + range_before)
    before = IJ.getImage()
    WindowManager.setTempCurrentImage(image)
    IJ.run("Duplicate...", "title=after duplicate range=" + range_after)
    after = IJ.getImage()

    down = calc.run("Subtract create stack", before, after)
    up = calc.run("Subtract create stack", after, before)
    before.close()
    up.setTitle('Up')
    up.show()
    down.setTitle('Down')
    down.show()

    if gd.getCheckboxes()[0].getState():

        IJ.run("Merge Channels...", "c1=Up c3=Down c4=after create ignore")
