it's trivial, you can do it yourself. Assuming your sprites have alpha value 0 in unused areas, you can do the following (in pseudocode):
pixels_out = pixels
for y in pixels.height()
for x in pixels.width()
if pixels(x,y).alpha == 0,
neighbour_in_sprite = false
for y2 in [-1,0,1]
for x2 in [-1,0,1]
if pixels(x+x2,y+y2).alpha > 0
neighbour_in_sprite = true
break
if neighbour_in_sprite
break
if neighbour_in_sprite
pixels_out(x,y).color = [0,0,0]
pixels_out(x,y).alpha = 255
It's pretty much, for every unused pixel in the 8-neighbourhood of a used pixel, mark it as silhouette and set the black colour and normal alpha .