Skip to content

Commit 70b0015

Browse files
authored
Extra sub seed paramaters (#45)
* Implement extra seed parameters * Added automatic migration * Handle persistent SQL defaults * Added translations
1 parent 451bff6 commit 70b0015

File tree

32 files changed

+369
-39
lines changed

32 files changed

+369
-39
lines changed

core/ui/src/main/java/com/shifthackz/aisdv1/core/viewmodel/MviViewModel.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
package com.shifthackz.aisdv1.core.viewmodel
44

5+
import android.util.Log
56
import androidx.lifecycle.ViewModel
67
import androidx.lifecycle.viewModelScope
8+
import com.shifthackz.aisdv1.core.ui.BuildConfig
79
import com.shifthackz.aisdv1.core.ui.MviEffect
810
import com.shifthackz.aisdv1.core.ui.MviState
911
import kotlinx.coroutines.CoroutineExceptionHandler
1012
import kotlinx.coroutines.Dispatchers
13+
import kotlinx.coroutines.channels.Channel
14+
import kotlinx.coroutines.flow.Flow
1115
import kotlinx.coroutines.flow.MutableStateFlow
1216
import kotlinx.coroutines.flow.StateFlow
1317
import kotlinx.coroutines.flow.asStateFlow
14-
import kotlinx.coroutines.channels.Channel
15-
import kotlinx.coroutines.flow.*
18+
import kotlinx.coroutines.flow.receiveAsFlow
1619
import kotlinx.coroutines.launch
1720

1821
abstract class MviViewModel<S : MviState, E : MviEffect> : ViewModel() {
@@ -33,6 +36,9 @@ abstract class MviViewModel<S : MviState, E : MviEffect> : ViewModel() {
3336
abstract val emptyState: S
3437

3538
open fun setState(state: S) {
39+
if (BuildConfig.DEBUG) {
40+
Log.d(this::class.simpleName, "NEW STATE : $state")
41+
}
3642
mutableState.tryEmit(state)
3743
}
3844

data/src/main/java/com/shifthackz/aisdv1/data/mappers/AiGenerationResultMappers.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ fun AiGenerationResult.mapDomainToEntity(): GenerationResultEntity = with(this)
2323
restoreFaces = restoreFaces,
2424
sampler = sampler,
2525
seed = seed,
26+
subSeed = subSeed,
27+
subSeedStrength = subSeedStrength,
28+
denoisingStrength = denoisingStrength,
2629
)
2730
}
2831
//endregion
@@ -47,6 +50,9 @@ fun GenerationResultEntity.mapEntityToDomain(): AiGenerationResult = with(this)
4750
restoreFaces = restoreFaces,
4851
sampler = sampler,
4952
seed = seed,
53+
subSeed = subSeed,
54+
subSeedStrength = subSeedStrength,
55+
denoisingStrength = denoisingStrength,
5056
)
5157
}
5258
//endregion

data/src/main/java/com/shifthackz/aisdv1/data/mappers/ImageToImagePayloadMappers.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
44
import com.shifthackz.aisdv1.domain.entity.ImageToImagePayload
55
import com.shifthackz.aisdv1.network.request.ImageToImageRequest
66
import com.shifthackz.aisdv1.network.response.SdGenerationResponse
7-
import java.util.*
7+
import java.util.Date
88

99
fun ImageToImagePayload.mapToRequest(): ImageToImageRequest = with(this) {
1010
ImageToImageRequest(
@@ -18,6 +18,8 @@ fun ImageToImagePayload.mapToRequest(): ImageToImageRequest = with(this) {
1818
height = height,
1919
restoreFaces = restoreFaces,
2020
seed = seed.trim().ifEmpty { null },
21+
subSeed = subSeed.trim().ifEmpty { null },
22+
subSeedStrength = subSeedStrength,
2123
samplerIndex = sampler,
2224
)
2325
}
@@ -30,6 +32,7 @@ fun Pair<ImageToImagePayload, SdGenerationResponse>.mapToAiGenResult(): AiGenera
3032
inputImage = payload.base64Image,
3133
createdAt = Date(),
3234
type = AiGenerationResult.Type.IMAGE_TO_IMAGE,
35+
denoisingStrength = payload.denoisingStrength,
3336
prompt = payload.prompt,
3437
negativePrompt = payload.negativePrompt,
3538
width = payload.width,
@@ -38,8 +41,10 @@ fun Pair<ImageToImagePayload, SdGenerationResponse>.mapToAiGenResult(): AiGenera
3841
cfgScale = payload.cfgScale,
3942
restoreFaces = payload.restoreFaces,
4043
sampler = payload.sampler,
41-
seed = if (payload.seed.trim().isNotEmpty()) payload.seed else mapSeedFromRemote(
42-
response.info
43-
),
44+
seed = if (payload.seed.trim().isNotEmpty()) payload.seed
45+
else mapSeedFromRemote(response.info),
46+
subSeed = if (payload.subSeed.trim().isNotEmpty()) payload.subSeed
47+
else mapSubSeedFromRemote(response.info),
48+
subSeedStrength = payload.subSeedStrength,
4449
)
4550
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.shifthackz.aisdv1.data.mappers
2+
3+
import com.google.gson.Gson
4+
import com.google.gson.reflect.TypeToken
5+
import com.shifthackz.aisdv1.core.common.log.errorLog
6+
import com.shifthackz.aisdv1.network.response.SdGenerationResponse
7+
8+
fun mapSeedFromRemote(infoString: String): String = parseInfo(infoString).fold(
9+
onFailure = { "" },
10+
onSuccess = { "${it.seed}" }
11+
)
12+
13+
fun mapSubSeedFromRemote(infoString: String): String = parseInfo(infoString).fold(
14+
onFailure = { "" },
15+
onSuccess = { "${it.subSeed}" }
16+
)
17+
18+
private fun parseInfo(infoString: String) = runCatching {
19+
return@runCatching Gson().fromJson<SdGenerationResponse.Info>(
20+
infoString,
21+
object : TypeToken<SdGenerationResponse.Info>() {}.type
22+
)
23+
}.onFailure { errorLog("::parseInfo", it) }

data/src/main/java/com/shifthackz/aisdv1/data/mappers/SeedMapper.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

data/src/main/java/com/shifthackz/aisdv1/data/mappers/TextToImagePayloadMappers.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
44
import com.shifthackz.aisdv1.domain.entity.TextToImagePayload
55
import com.shifthackz.aisdv1.network.request.TextToImageRequest
66
import com.shifthackz.aisdv1.network.response.SdGenerationResponse
7-
import java.util.*
7+
import java.util.Date
88

99
fun TextToImagePayload.mapToRequest(): TextToImageRequest = with(this) {
1010
TextToImageRequest(
@@ -16,6 +16,8 @@ fun TextToImagePayload.mapToRequest(): TextToImageRequest = with(this) {
1616
height = height,
1717
restoreFaces = restoreFaces,
1818
seed = seed.trim().ifEmpty { null },
19+
subSeed = subSeed.trim().ifEmpty { null },
20+
subSeedStrength = subSeedStrength,
1921
samplerIndex = sampler,
2022
)
2123
}
@@ -28,6 +30,7 @@ fun Pair<TextToImagePayload, SdGenerationResponse>.mapToAiGenResult(): AiGenerat
2830
inputImage = "",
2931
createdAt = Date(),
3032
type = AiGenerationResult.Type.TEXT_TO_IMAGE,
33+
denoisingStrength = 0f,
3134
prompt = payload.prompt,
3235
negativePrompt = payload.negativePrompt,
3336
width = payload.width,
@@ -36,8 +39,10 @@ fun Pair<TextToImagePayload, SdGenerationResponse>.mapToAiGenResult(): AiGenerat
3639
cfgScale = payload.cfgScale,
3740
restoreFaces = payload.restoreFaces,
3841
sampler = payload.sampler,
39-
seed = if (payload.seed.trim().isNotEmpty()) payload.seed else mapSeedFromRemote(
40-
response.info
41-
),
42+
seed = if (payload.seed.trim().isNotEmpty()) payload.seed
43+
else mapSeedFromRemote(response.info),
44+
subSeed = if (payload.subSeed.trim().isNotEmpty()) payload.subSeed
45+
else mapSubSeedFromRemote(response.info),
46+
subSeedStrength = payload.subSeedStrength,
4247
)
4348
}

demo/src/main/java/com/shifthackz/aisdv1/demo/ImageToImageDemoImpl.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.shifthackz.aisdv1.demo.serialize.DemoDataSerializer
44
import com.shifthackz.aisdv1.domain.demo.ImageToImageDemo
55
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
66
import com.shifthackz.aisdv1.domain.entity.ImageToImagePayload
7-
import java.util.*
7+
import java.util.Date
88

99
internal class ImageToImageDemoImpl(
1010
override val demoDataSerializer: DemoDataSerializer,
@@ -25,6 +25,9 @@ internal class ImageToImageDemoImpl(
2525
restoreFaces = input.restoreFaces,
2626
sampler = input.sampler,
2727
seed = System.currentTimeMillis().toString(),
28+
subSeed = System.currentTimeMillis().toString(),
29+
subSeedStrength = 0f,
30+
denoisingStrength = 0f,
2831
)
2932

3033
override fun getDemoBase64(payload: ImageToImagePayload) = execute(payload)

demo/src/main/java/com/shifthackz/aisdv1/demo/TextToImageDemoImpl.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.shifthackz.aisdv1.demo.serialize.DemoDataSerializer
44
import com.shifthackz.aisdv1.domain.demo.TextToImageDemo
55
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
66
import com.shifthackz.aisdv1.domain.entity.TextToImagePayload
7-
import java.util.*
7+
import java.util.Date
88

99
internal class TextToImageDemoImpl(
1010
override val demoDataSerializer: DemoDataSerializer,
@@ -25,6 +25,9 @@ internal class TextToImageDemoImpl(
2525
restoreFaces = input.restoreFaces,
2626
sampler = input.sampler,
2727
seed = System.currentTimeMillis().toString(),
28+
subSeed = System.currentTimeMillis().toString(),
29+
subSeedStrength = 0f,
30+
denoisingStrength = 0f,
2831
)
2932

3033
override fun getDemoBase64(payload: TextToImagePayload) = execute(payload)

domain/src/main/java/com/shifthackz/aisdv1/domain/entity/AiGenerationResult.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.shifthackz.aisdv1.domain.entity
22

3-
import java.util.*
3+
import java.util.Date
44

55
data class AiGenerationResult(
66
val id: Long,
@@ -17,6 +17,9 @@ data class AiGenerationResult(
1717
val restoreFaces: Boolean,
1818
val sampler: String,
1919
val seed: String,
20+
val subSeed: String,
21+
val subSeedStrength: Float,
22+
val denoisingStrength: Float,
2023
) {
2124
enum class Type(val key: String) {
2225
TEXT_TO_IMAGE("txt2img"),

domain/src/main/java/com/shifthackz/aisdv1/domain/entity/ImageToImagePayload.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ data class ImageToImagePayload(
1111
val height: Int,
1212
val restoreFaces: Boolean,
1313
val seed: String,
14+
val subSeed: String,
15+
val subSeedStrength: Float,
1416
val sampler: String,
15-
)
17+
)

0 commit comments

Comments
 (0)