How can I automatize the separation of flat faces in a geodesic polyhedron?
Look at the edges face angle

This answer https://blender.stackexchange.com/a/177913/15543 separates a mesh into all its faces, and makes the face center the origin of the new single face mesh.


Result, all flat regions separated, showing one "face object" in edit mode

Instead for script below, make a bmesh, find all the edges whos face angle is greater than 1 degree and split them.  Note a boundary edge has no face angle

Then pop into object mode and separate into loose parts.  As in prior answer the origin is moved to center of geom of new object, rather than keeping that of old.

Run the script with object of interest active and in edit mode.

import bpy
import bmesh
from mathutils import Quaternion, Vector
from math import radians


context = bpy.context

tol_angle = radians(1) # one degree tolerance of flat

ob = context.edit_object
me = context.object.data
bm = bmesh.from_edit_mesh(me)
edges = [e for e in bm.edges 
        if not e.is_boundary 
        and e.calc_face_angle() &gt; tol_angle]

bmesh.ops.split_edges(bm, edges=edges)

bpy.ops.mesh.separate(type='LOOSE')

bpy.ops.object.mode_set()
z = Quaternion()
for ob in context.selected_objects:
    print(ob)
    me = ob.data
    mw = ob.matrix_world
    mwi = mw.inverted()
    c = sum((v.co for v in me.vertices), Vector()) / len(me.vertices)
    n = sum((f.normal for f in me.polygons), Vector()).normalized()


    q = z.rotation_difference(n.to_track_quat())
    M =  q.to_matrix().to_4x4()
    M.translation = c
    me.transform(mwi @ M.inverted())
    ob.matrix_world = M


Note the edge split modifier could be added and applied to emulate the edge split bmesh modifier (may be quicker on large meshes). Would need to be in object mode to apply modifier. Still need to be in edit mode to separate loose.