I don't know if it is possible using actual options in Modeler or Processing window, but you can make a script doing that.
from qgis.PyQt.QtCore import QCoreApplication
from qgis.core import (QgsProcessing,
QgsFeatureSink,
QgsProcessingAlgorithm,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterFeatureSink)
class ExampleProcessingAlgorithm(QgsProcessingAlgorithm):
INPUT1 = 'INPUT1'
INPUT2 = 'INPUT2'
OUTPUT = 'OUTPUT'
def tr(self, string):
return QCoreApplication.translate('Processing', string)
def createInstance(self):
return ExampleProcessingAlgorithm()
def name(self):
return 'myscript'
def displayName(self):
return self.tr('Custom Difference')
def group(self):
return self.tr('Example scripts')
def groupId(self):
return 'examplescripts'
def shortHelpString(self):
return self.tr("Example algorithm short description")
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT1, self.tr('Layer1')))
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT2, self.tr('Layer2')))
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Output')))
def processAlgorithm(self, parameters, context, feedback):
layer1 = self.parameterAsVectorLayer(parameters, self.INPUT1, context)
layer2 = self.parameterAsVectorLayer(parameters, self.INPUT2, context)
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
layer1.fields(), layer1.wkbType(), layer1.sourceCrs())
for i in range(layer1.featureCount()):
feat1 = layer1.getFeature(i)
feat2 = layer2.getFeature(i)
### main processsing section ###
geom = feat1.geometry().difference(feat2.geometry())
feat1.setGeometry(geom)
################################
sink.addFeature(feat1, QgsFeatureSink.FastInsert)
return {self.OUTPUT: dest_id}
Then use it in QGIS Modeler:

Inputs: (Upper polygons in two layers have the same FID
value. Same as lower polygons)

Output:

1
infeature 1
, id or an attribute value?