A family of curves in the $xy$-plane is described by an equation of the form $ y = f(x,y, C_1, ..., C_n) $ or $ F(x, y, C_1, ..., C_n) = 0$. In order to find the ODE of such a family, one generally supplements its equation with $n$ additional equations generated through successive differentiations with respect to $x$. One ends up with $(n+1)$ equations from which the constants are eliminated to obtain the sought ODE. The following code implements this procedure
geometricODE[eq_, indepVar_, depVar_, cst_] := Eliminate[
D[eq /. a_ == b_ :> a - b /. depVar -> depVar@indepVar, {indepVar, #}] == 0 & /@
Range[0, Length[cst]], cst] // Simplify;
Below are few examples.
geometricODE[x^2*y^2 - b^2*x^2 - a^2*y^2, x, y, {a, b}]
geometricODE[(x - a)^2 + (y - b)^2 == c^2, x, y, {a, b, c}]
Solve[geometricODE[y == Tan[a*x + b] + 1/2, x, y, {a, b}], y''[x]] // Quiet
Solve[geometricODE[y - c*Sqrt[x]* Cos[a*Sqrt[x] + b] == 0, x,
y, {a, b, c}], y'''[x]] // Quiet