This is lying around for years, let’s try to get it finally working. The code below works, but doesn’t do the right thing. Since the original image doesn’t contain a resolution setting, gm doesn’t do anything: “gm convert: image does not contain resolution” It would be more reliable to use “gm convert -resize”, but for that we need to know the final pixel size. How can a converter function access … – the final (scaled) size of a placed image – the original pixel size of an image ? With that information it would be easy to calculate the target pixel size. And then it would be nice to hook this function into \setupexternalfigure[conversion=] """ \startluacode local function downsampler(oldname, newname, resolution) if not resolution or resolution == "" then resolution = 72 end local cmd = string.format( [[gm convert -resample %ix%i "%s" "%s"]], resolution, resolution, oldname, newname) logs.report("downsample", cmd) os.execute(cmd) end -- Set the PDF and default JPEG converters to the above function. figures.converters.jpg.pdf = downsampler figures.converters.jpg.default = downsampler \stopluacode \setupexternalfigure[ %conversion=downsampler,% not used resolution=10, ] \starttext \externalfigure[https://upload.wikimedia.org/wikipedia/commons/d/dd/Hermann_Zapf_signing.jpg][width=.5\textwidth] \stoptext """ Hraban