Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ class ArtworkOrchestrator(
averageHz = request.averageHz,
averageVolume = request.averageVolulme,
averageTimbre = request.averageTimbre,
base64Image = Base64.getDecoder().decode(request.base64Image)
base64Image = Base64.getDecoder().decode(request.base64Image),
voiceColor = request.voiceColor
)
} catch (e: IllegalArgumentException) {
log.error("Invalid Base64 image data provided for request with uuid: {}", request.uuid)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ data class ArtworkRepresentation(
val averageVolume: Double,
val averageTimbre: Double,
val base64Image: ByteArray, // 현행 기획 및 설계 상 중복 제거와 같은 비교 로직이 필요하지 않음 -> hashCode(), equals() 오버라이드 불필요
val voiceColor: String, // 음색의 HEX CODE
val creatdAt: LocalDateTime = LocalDateTime.now(),

// LLM 호출 이후 채울 필드 : nullable 로 선언
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/com/tondo/api/dto/ArtworkCreateRequest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ data class ArtworkCreateRequest(
val averageHz: Double,
val averageVolulme: Double,
val averageTimbre: Double,
val base64Image: String // 이 필드의 크기가 클 수 있습니다! JSON 페이로드 크기 보고, request body size limit 늘려야할 수 있습니다!
val base64Image: String, // 이 필드의 크기가 클 수 있습니다! JSON 페이로드 크기 보고, request body size limit 늘려야할 수 있습니다!
val voiceColor: String // 음색의 HEX CODE
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data class BedrockImageRequest(
) {
companion object {
fun fromDomain(rep: ArtworkRepresentation): BedrockImageRequest {
val generatedPrompt = BedrockPromptTemplate.createImageGenerationPrompt()
val generatedPrompt = BedrockPromptTemplate.createImageGenerationPrompt(rep.voiceColor)
// ArtworkRepresentation의 base64Image가 ByteArray이므로 AWS 스펙에 맞게 Base64 String으로 인코딩합니다.
val encodedImage = java.util.Base64.getEncoder().encodeToString(rep.base64Image)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ class BedrockService(
val prompt = BedrockPromptTemplate.createDocentPrompt(
averageHz = artworkRepresentation.averageHz,
averageTimbre = artworkRepresentation.averageTimbre,
averageVolume = artworkRepresentation.averageVolume
averageVolume = artworkRepresentation.averageVolume,
voiceColor = artworkRepresentation.voiceColor
)

val requestBody = objectMapper.writeValueAsString(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ object BedrockPromptTemplate {
averageHz: Double,
averageTimbre: Double,
averageVolume: Double,
hexColor: String = "#97b6e1" // 필요시 동적으로 주입할 수 있도록 기본값 파라미터화
voiceColor: String = "#97b6e1" // 필요시 동적으로 주입할 수 있도록 기본값 파라미터화
): String {
return """
당신은 미디어 아트 페스티벌의 수석 도슨트입니다. 아래의 관람객 음성 추출 데이터와 이 파동을 시각화하기 위해 AI에 적용된 아트워크 스타일과 실제 적용된 이미지를 바탕으로 도슨트 해설을 작성해 주세요.
Expand All @@ -24,7 +24,7 @@ object BedrockPromptTemplate {
- 목소리 크기 (에너지): ${averageVolume}dB

[시각화 적용 스타일 및 색상]
- 메인 색상 코드: ${hexColor} (이 색상을 기반으로 어두움과 밝음이 배치됨)
- 메인 색상 코드: ${voiceColor} (이 색상을 기반으로 어두움과 밝음이 배치됨)
- 렌더링 기법: 캔버스 질감이 살아있는 정교한 아크릴화
- 세부 묘사: 대담하고 대칭적인 구조, 미세한 점들을 선으로 재해석한 이분법적 점묘 기법

Expand Down Expand Up @@ -55,11 +55,11 @@ object BedrockPromptTemplate {
// Ensure a perfect harmony between symmetrical structure and rich, thick paint texture.
// """.trimIndent()
// }
fun createImageGenerationPrompt(hexColor: String = "#97b6e1"): String {
fun createImageGenerationPrompt(voiceColor: String = "#97b6e1"): String {
return """
High-quality acrylic painting on canvas,
intricate Chladni pattern with geometric symmetry,
primary color palette of $hexColor with deep contrasting shadows,
primary color palette of $voiceColor with deep contrasting shadows,
thick brushstroke texture, rhythmic pointillism,
modern abstract art style, 8k resolution, masterpiece.
""".trimIndent()
Expand Down
Loading