E1 FUSIÓN-COHERENCIA (una identidad de arte clave) w1,w2 => UNA identidad de evento (cultura/tono/paleta); m1,m2 => UN lenguaje de impresión mediante dominancia por canal sobre {layout, type, texture, finish, color}; conflictos resueltos por dominancia. ¬E1 = dos carteles peleando / collage de tratamientos no relacionados. E2 ICONICIDAD DEL SUJETO + LECTURA A DISTANCIA el sujeto es el concepto principal, visualmente icónico, listo para cartel, memorable desde la distancia (silueta/icono fuerte, dominante en el encuadre). ¬E2 = sujeto enterrado / genérico / no legible de lejos. E3 COMPLETITUD DE INFORMACIÓN + LEGIBILIDAD texto corto legible presente: nombre del evento · fecha · ubicación · eslogan · 1-3 detalles pequeños; todo legible; corto (¬párrafos, ¬lorem). ¬E3 = falta fecha/ubicación / ilegible / lorem. E4 REALISMO DE IMPRESIÓN + VERDAD MECÁNICA los artefactos de las mecánicas elegidas son auténticos y consistentes (textura de serigrafía, grano de riso, semitono, foil, pliegues, ruido de xerox, brillo de neón…); tipografía/jerarquía/textura fuertes. ¬E4 = digital plano / artefactos mecánicos incorrectos o ausentes. E5 MARCO DE UN SOLO CARTEL UN cartel; ¬panel de especificaciones a la derecha; ¬2:1; ¬dividido; composición cohesiva. ¬E5 = panel/2:1/dividido. η IMPRESIÓN HONESTA registro, grano de papel, comportamiento de tinta auténticos a las mecánicas elegidas. PROHIBIDO = elección duplicada · collage · sujeto enterrado · información faltante/ilegible · lorem · digital plano · panel de especificaciones · 2:1 WORLDS=[...30...]; MECH=[...25...] CHANNELS=["layout","type","texture","finish","color"] class EventPoster: def __init__(self, SUBJECT, seed): rng=random.Random(seed) self.w1,self.w2=rng.sample(WORLDS,2); self.m1,self.m2=rng.sample(MECH,2) # distinct self.fuse=self.reconcile() def reconcile(self): # E1: dominancia por canal master={c:max((self.m1,self.m2),key=lambda m:affinity(m,c)) for c in CHANNELS} return Fusion(identity=self.w1, accent=self.w2, master=master, palette=derive(self.w1,self.w2), name=event_name(SUBJECT,self.w1)) def render(self): info=infer_info(SUBJECT,self.fuse) # name,date,location,tagline,details (E3) return single_poster( icon=iconify(SUBJECT, self.fuse), # E2 icono dominante layers=mechanic_layers(self.fuse), # E4 artefactos auténticos text=info, hierarchy=STRONG ) def verify(self, img, info): assert one_value_per_channel(img,self.fuse), "E1: dos carteles peleando" assert iconic_at_distance(img, SUBJECT) and dominant(SUBJECT,img), "E2" assert all_present(info,[name,date,location,tagline]) and 1<=len(details)<=3 \ and all(legible(t,img) for t in info) and not lorem(img), "E3" assert mechanic_artifacts(img,self.fuse.master), "E4: digital plano" assert frames(img)==1 and not spec_panel(img) and not two_to_one(img), "E5" EventPoster(SUBJECT, seed).render()
Discusión
0 comentarios