@umituz/react-native-ai-generation-content 1.26.2 → 1.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/domains/generation/application/feature-registry.ts +101 -0
- package/src/domains/generation/application/generation-strategy.factory.ts +128 -0
- package/src/domains/generation/domain/feature-config.types.ts +61 -0
- package/src/domains/generation/domain/generation.types.ts +74 -0
- package/src/domains/generation/index.ts +37 -0
- package/src/domains/generation/presentation/useAIGeneration.hook.ts +106 -0
- package/src/domains/wizard/infrastructure/strategies/wizard-strategy.factory.ts +3 -4
- package/src/index.ts +1 -25
- package/src/infrastructure/executors/executor-factory.ts +53 -0
- package/src/infrastructure/executors/image-executor.ts +133 -0
- package/src/infrastructure/executors/video-executor.ts +130 -0
- package/src/features/ai-hug/README.md +0 -438
- package/src/features/ai-hug/domain/index.ts +0 -5
- package/src/features/ai-hug/domain/types/ai-hug.types.ts +0 -25
- package/src/features/ai-hug/domain/types/index.ts +0 -7
- package/src/features/ai-hug/index.ts +0 -19
- package/src/features/ai-hug/presentation/components/AIHugFeature.tsx +0 -77
- package/src/features/ai-hug/presentation/components/index.ts +0 -2
- package/src/features/ai-hug/presentation/hooks/index.ts +0 -9
- package/src/features/ai-hug/presentation/hooks/useAIHugFeature.ts +0 -34
- package/src/features/ai-hug/presentation/index.ts +0 -6
- package/src/features/ai-kiss/README.md +0 -445
- package/src/features/ai-kiss/domain/index.ts +0 -5
- package/src/features/ai-kiss/domain/types/ai-kiss.types.ts +0 -25
- package/src/features/ai-kiss/domain/types/index.ts +0 -7
- package/src/features/ai-kiss/index.ts +0 -19
- package/src/features/ai-kiss/presentation/components/AIKissFeature.tsx +0 -77
- package/src/features/ai-kiss/presentation/components/index.ts +0 -2
- package/src/features/ai-kiss/presentation/hooks/index.ts +0 -9
- package/src/features/ai-kiss/presentation/hooks/useAIKissFeature.ts +0 -34
- package/src/features/ai-kiss/presentation/index.ts +0 -6
- package/src/features/anime-selfie/README.md +0 -396
- package/src/features/anime-selfie/domain/index.ts +0 -5
- package/src/features/anime-selfie/domain/types/anime-selfie.types.ts +0 -52
- package/src/features/anime-selfie/domain/types/index.ts +0 -8
- package/src/features/anime-selfie/index.ts +0 -20
- package/src/features/anime-selfie/presentation/components/AnimeSelfieFeature.tsx +0 -86
- package/src/features/anime-selfie/presentation/components/index.ts +0 -2
- package/src/features/anime-selfie/presentation/hooks/index.ts +0 -9
- package/src/features/anime-selfie/presentation/hooks/useAnimeSelfieFeature.ts +0 -59
- package/src/features/anime-selfie/presentation/index.ts +0 -6
- package/src/features/couple-future/README.md +0 -445
- package/src/features/couple-future/domain/types.ts +0 -63
- package/src/features/couple-future/domain/wizard-config.adapter.ts +0 -76
- package/src/features/couple-future/domain/wizard.types.ts +0 -121
- package/src/features/couple-future/index.ts +0 -83
- package/src/features/couple-future/infrastructure/coupleFeatureRegistry.ts +0 -76
- package/src/features/couple-future/infrastructure/couplePromptEnhancer.ts +0 -100
- package/src/features/couple-future/infrastructure/executor.ts +0 -188
- package/src/features/couple-future/infrastructure/generationUtils.ts +0 -228
- package/src/features/couple-future/presentation/components/ArtStyleSelector.tsx +0 -146
- package/src/features/couple-future/presentation/components/ArtistStyleSelector.tsx +0 -122
- package/src/features/couple-future/presentation/components/CoupleFutureWizard.tsx +0 -239
- package/src/features/couple-future/presentation/components/GeneratingStepContent.tsx +0 -86
- package/src/features/couple-future/presentation/components/RomanticMoodSelector.tsx +0 -147
- package/src/features/couple-future/presentation/components/WardrobeSelector.tsx +0 -141
- package/src/features/couple-future/presentation/components/index.ts +0 -12
- package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.ts +0 -166
- package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.types.ts +0 -69
- package/src/features/couple-future/presentation/hooks/useCoupleFutureHandlers.ts +0 -117
- package/src/features/couple-future/presentation/screens/CoupleFeatureScreen.tsx +0 -113
- package/src/features/face-swap/README.md +0 -431
- package/src/features/face-swap/domain/index.ts +0 -5
- package/src/features/face-swap/domain/types/face-swap.types.ts +0 -26
- package/src/features/face-swap/domain/types/index.ts +0 -7
- package/src/features/face-swap/index.ts +0 -19
- package/src/features/face-swap/presentation/components/FaceSwapFeature.tsx +0 -87
- package/src/features/face-swap/presentation/components/index.ts +0 -2
- package/src/features/face-swap/presentation/hooks/index.ts +0 -6
- package/src/features/face-swap/presentation/hooks/useFaceSwapFeature.ts +0 -35
- package/src/features/face-swap/presentation/index.ts +0 -6
- package/src/features/hd-touch-up/README.md +0 -396
- package/src/features/hd-touch-up/domain/index.ts +0 -1
- package/src/features/hd-touch-up/domain/types/hd-touch-up.types.ts +0 -62
- package/src/features/hd-touch-up/domain/types/index.ts +0 -9
- package/src/features/hd-touch-up/index.ts +0 -21
- package/src/features/hd-touch-up/presentation/components/HDTouchUpFeature.tsx +0 -86
- package/src/features/hd-touch-up/presentation/components/index.ts +0 -2
- package/src/features/hd-touch-up/presentation/hooks/index.ts +0 -1
- package/src/features/hd-touch-up/presentation/hooks/useHDTouchUpFeature.ts +0 -23
- package/src/features/hd-touch-up/presentation/index.ts +0 -2
- package/src/features/image-to-image/README.md +0 -459
- package/src/features/image-to-image/domain/index.ts +0 -1
- package/src/features/image-to-image/domain/types/base.types.ts +0 -48
- package/src/features/image-to-image/domain/types/index.ts +0 -1
- package/src/features/image-to-image/domain/types/partials/config.types.ts +0 -37
- package/src/features/image-to-image/domain/types/partials/hook.types.ts +0 -53
- package/src/features/image-to-image/domain/types/partials/metadata.types.ts +0 -32
- package/src/features/image-to-image/domain/types/partials/result.types.ts +0 -44
- package/src/features/image-to-image/domain/types/partials/state.types.ts +0 -34
- package/src/features/image-to-image/domain/types/partials/translation.types.ts +0 -57
- package/src/features/image-to-image/index.ts +0 -2
- package/src/features/image-to-image/presentation/hooks/index.ts +0 -3
- package/src/features/image-to-image/presentation/hooks/useDualImageFeature.ts +0 -204
- package/src/features/image-to-image/presentation/hooks/useImageWithPromptFeature.ts +0 -223
- package/src/features/image-to-image/presentation/hooks/useSingleImageFeature.ts +0 -166
- package/src/features/image-to-image/presentation/index.ts +0 -1
- package/src/features/image-to-video/README.md +0 -414
- package/src/features/image-to-video/domain/constants/animation.constants.ts +0 -47
- package/src/features/image-to-video/domain/constants/duration.constants.ts +0 -13
- package/src/features/image-to-video/domain/constants/form.constants.ts +0 -22
- package/src/features/image-to-video/domain/constants/index.ts +0 -23
- package/src/features/image-to-video/domain/constants/music.constants.ts +0 -53
- package/src/features/image-to-video/domain/index.ts +0 -5
- package/src/features/image-to-video/domain/types/animation.types.ts +0 -20
- package/src/features/image-to-video/domain/types/config.types.ts +0 -56
- package/src/features/image-to-video/domain/types/duration.types.ts +0 -11
- package/src/features/image-to-video/domain/types/form.types.ts +0 -35
- package/src/features/image-to-video/domain/types/image-to-video.types.ts +0 -122
- package/src/features/image-to-video/domain/types/index.ts +0 -39
- package/src/features/image-to-video/domain/types/music.types.ts +0 -21
- package/src/features/image-to-video/index.ts +0 -116
- package/src/features/image-to-video/infrastructure/index.ts +0 -1
- package/src/features/image-to-video/infrastructure/services/image-to-video-executor.ts +0 -154
- package/src/features/image-to-video/infrastructure/services/index.ts +0 -5
- package/src/features/image-to-video/presentation/components/AddMoreCard.tsx +0 -52
- package/src/features/image-to-video/presentation/components/AnimationStyleSelector.tsx +0 -135
- package/src/features/image-to-video/presentation/components/DurationSelector.tsx +0 -110
- package/src/features/image-to-video/presentation/components/EmptyGridState.tsx +0 -69
- package/src/features/image-to-video/presentation/components/GridImageItem.tsx +0 -64
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.styles.ts +0 -84
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.tsx +0 -77
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.types.ts +0 -18
- package/src/features/image-to-video/presentation/components/MusicMoodSelector.tsx +0 -181
- package/src/features/image-to-video/presentation/components/index.ts +0 -30
- package/src/features/image-to-video/presentation/hooks/index.ts +0 -27
- package/src/features/image-to-video/presentation/hooks/useFormState.ts +0 -116
- package/src/features/image-to-video/presentation/hooks/useGeneration.ts +0 -85
- package/src/features/image-to-video/presentation/hooks/useGenerationExecution.ts +0 -143
- package/src/features/image-to-video/presentation/hooks/useImageToVideoFeature.ts +0 -107
- package/src/features/image-to-video/presentation/hooks/useImageToVideoForm.ts +0 -119
- package/src/features/image-to-video/presentation/hooks/useImageToVideoValidation.ts +0 -46
- package/src/features/image-to-video/presentation/index.ts +0 -5
- package/src/features/love-message/domain/constants.ts +0 -162
- package/src/features/love-message/domain/types.ts +0 -58
- package/src/features/love-message/index.ts +0 -37
- package/src/features/love-message/infrastructure/persistence/PartnerProfileRepository.ts +0 -52
- package/src/features/love-message/infrastructure/prompts/messagePromptBuilder.ts +0 -109
- package/src/features/love-message/infrastructure/services/LoveMessageService.ts +0 -35
- package/src/features/love-message/presentation/components/CategoryGrid.tsx +0 -88
- package/src/features/love-message/presentation/components/DetailsInput.tsx +0 -74
- package/src/features/love-message/presentation/components/ExploreHeader.tsx +0 -67
- package/src/features/love-message/presentation/components/FieldInput.tsx +0 -83
- package/src/features/love-message/presentation/components/GeneratorHeader.tsx +0 -88
- package/src/features/love-message/presentation/components/LoveMessageHeroSection.tsx +0 -114
- package/src/features/love-message/presentation/components/MessageListItem.tsx +0 -77
- package/src/features/love-message/presentation/components/MessageResult.tsx +0 -105
- package/src/features/love-message/presentation/components/PartnerInput.tsx +0 -78
- package/src/features/love-message/presentation/components/ProgressDots.tsx +0 -48
- package/src/features/love-message/presentation/components/StepDetails.tsx +0 -23
- package/src/features/love-message/presentation/components/StepPartner.tsx +0 -116
- package/src/features/love-message/presentation/components/StepVibe.tsx +0 -30
- package/src/features/love-message/presentation/components/ToneSelector.tsx +0 -100
- package/src/features/love-message/presentation/components/TrendingSection.tsx +0 -130
- package/src/features/love-message/presentation/components/TypeSelector.tsx +0 -99
- package/src/features/love-message/presentation/hooks/useLoveMessageGenerator.ts +0 -114
- package/src/features/love-message/presentation/hooks/usePartnerProfile.ts +0 -43
- package/src/features/love-message/presentation/navigation/LoveMessageStack.tsx +0 -39
- package/src/features/love-message/presentation/screens/LoveMessageExploreScreen.tsx +0 -53
- package/src/features/love-message/presentation/screens/LoveMessageGeneratorScreen.tsx +0 -169
- package/src/features/love-message/presentation/screens/MessageListScreen.tsx +0 -127
- package/src/features/love-message/presentation/screens/PartnerProfileScreen.tsx +0 -119
- package/src/features/meme-generator/README.md +0 -408
- package/src/features/meme-generator/index.ts +0 -3
- package/src/features/meme-generator/infrastructure/services/MemeGenerationService.ts +0 -87
- package/src/features/meme-generator/presentation/components/MemeGeneratorFeature.tsx +0 -180
- package/src/features/meme-generator/presentation/components/index.ts +0 -2
- package/src/features/meme-generator/presentation/screens/MemeGeneratorScreen.tsx +0 -168
- package/src/features/meme-generator/presentation/screens/index.ts +0 -1
- package/src/features/partner-upload/domain/types.ts +0 -59
- package/src/features/partner-upload/index.ts +0 -30
- package/src/features/partner-upload/presentation/components/PartnerInfoInput.tsx +0 -112
- package/src/features/partner-upload/presentation/components/PhotoTips.tsx +0 -53
- package/src/features/partner-upload/presentation/components/index.ts +0 -4
- package/src/features/partner-upload/presentation/hooks/index.ts +0 -7
- package/src/features/partner-upload/presentation/hooks/usePartnerStep.ts +0 -130
- package/src/features/partner-upload/presentation/screens/PartnerStepScreen.tsx +0 -231
- package/src/features/partner-upload/presentation/screens/index.ts +0 -6
- package/src/features/photo-restoration/README.md +0 -399
- package/src/features/photo-restoration/domain/index.ts +0 -1
- package/src/features/photo-restoration/domain/types/index.ts +0 -9
- package/src/features/photo-restoration/domain/types/photo-restore.types.ts +0 -64
- package/src/features/photo-restoration/index.ts +0 -22
- package/src/features/photo-restoration/presentation/components/PhotoRestoreFeature.tsx +0 -88
- package/src/features/photo-restoration/presentation/components/PhotoRestoreResultView.tsx +0 -86
- package/src/features/photo-restoration/presentation/components/index.ts +0 -4
- package/src/features/photo-restoration/presentation/hooks/index.ts +0 -1
- package/src/features/photo-restoration/presentation/hooks/usePhotoRestoreFeature.ts +0 -23
- package/src/features/photo-restoration/presentation/index.ts +0 -2
- package/src/features/remove-background/README.md +0 -393
- package/src/features/remove-background/domain/index.ts +0 -5
- package/src/features/remove-background/domain/types/index.ts +0 -7
- package/src/features/remove-background/domain/types/remove-background.types.ts +0 -28
- package/src/features/remove-background/index.ts +0 -19
- package/src/features/remove-background/presentation/components/RemoveBackgroundFeature.tsx +0 -86
- package/src/features/remove-background/presentation/components/index.ts +0 -2
- package/src/features/remove-background/presentation/hooks/index.ts +0 -1
- package/src/features/remove-background/presentation/hooks/useRemoveBackgroundFeature.ts +0 -28
- package/src/features/remove-background/presentation/index.ts +0 -6
- package/src/features/remove-object/README.md +0 -405
- package/src/features/remove-object/domain/index.ts +0 -5
- package/src/features/remove-object/domain/types/index.ts +0 -7
- package/src/features/remove-object/domain/types/remove-object.types.ts +0 -54
- package/src/features/remove-object/index.ts +0 -23
- package/src/features/remove-object/presentation/components/RemoveObjectFeature.tsx +0 -136
- package/src/features/remove-object/presentation/components/index.ts +0 -2
- package/src/features/remove-object/presentation/hooks/index.ts +0 -9
- package/src/features/remove-object/presentation/hooks/useRemoveObjectFeature.ts +0 -221
- package/src/features/remove-object/presentation/index.ts +0 -6
- package/src/features/replace-background/README.md +0 -405
- package/src/features/replace-background/domain/types/index.ts +0 -7
- package/src/features/replace-background/domain/types/replace-background.types.ts +0 -33
- package/src/features/replace-background/index.ts +0 -23
- package/src/features/replace-background/presentation/components/ReplaceBackgroundFeature.tsx +0 -105
- package/src/features/replace-background/presentation/components/index.ts +0 -6
- package/src/features/replace-background/presentation/hooks/index.ts +0 -9
- package/src/features/replace-background/presentation/hooks/useReplaceBackgroundFeature.ts +0 -55
- package/src/features/scenarios/domain/types.ts +0 -147
- package/src/features/scenarios/index.ts +0 -64
- package/src/features/scenarios/presentation/components/InspirationChips.tsx +0 -82
- package/src/features/scenarios/presentation/components/MagicPromptHeadline.tsx +0 -79
- package/src/features/scenarios/presentation/components/ScenarioGrid.tsx +0 -224
- package/src/features/scenarios/presentation/components/ScenarioHeader.tsx +0 -55
- package/src/features/scenarios/presentation/components/StyleSelector.tsx +0 -119
- package/src/features/scenarios/presentation/components/index.ts +0 -18
- package/src/features/scenarios/presentation/containers/CategoryNavigationContainer.tsx +0 -178
- package/src/features/scenarios/presentation/screens/HierarchicalScenarioListScreen.tsx +0 -266
- package/src/features/scenarios/presentation/screens/MagicPromptScreen.tsx +0 -242
- package/src/features/scenarios/presentation/screens/MainCategoryScreen.tsx +0 -198
- package/src/features/scenarios/presentation/screens/ScenarioPreviewScreen.tsx +0 -164
- package/src/features/scenarios/presentation/screens/ScenarioSelectorScreen.tsx +0 -66
- package/src/features/scenarios/presentation/screens/SubCategoryScreen.tsx +0 -216
- package/src/features/script-generator/README.md +0 -433
- package/src/features/script-generator/domain/constants/index.ts +0 -10
- package/src/features/script-generator/domain/types/script.types.ts +0 -30
- package/src/features/script-generator/index.ts +0 -5
- package/src/features/script-generator/infrastructure/services/ScriptGenerationService.ts +0 -62
- package/src/features/script-generator/presentation/components/ScriptDisplay.tsx +0 -158
- package/src/features/script-generator/presentation/components/VideoTypeSelector.tsx +0 -102
- package/src/features/script-generator/presentation/components/index.ts +0 -2
- package/src/features/script-generator/presentation/hooks/index.ts +0 -1
- package/src/features/script-generator/presentation/hooks/useScriptGenerator.ts +0 -77
- package/src/features/shared/README.md +0 -311
- package/src/features/shared/dual-image-video/domain/types/dual-image-video.types.ts +0 -88
- package/src/features/shared/dual-image-video/domain/types/index.ts +0 -14
- package/src/features/shared/dual-image-video/index.ts +0 -17
- package/src/features/shared/dual-image-video/presentation/hooks/index.ts +0 -5
- package/src/features/shared/dual-image-video/presentation/hooks/useDualImageVideoFeature.ts +0 -185
- package/src/features/shared/index.ts +0 -6
- package/src/features/text-to-image/README.md +0 -394
- package/src/features/text-to-image/domain/constants/index.ts +0 -8
- package/src/features/text-to-image/domain/constants/options.constants.ts +0 -39
- package/src/features/text-to-image/domain/constants/styles.constants.ts +0 -34
- package/src/features/text-to-image/domain/index.ts +0 -7
- package/src/features/text-to-image/domain/types/config.types.ts +0 -75
- package/src/features/text-to-image/domain/types/form.types.ts +0 -58
- package/src/features/text-to-image/domain/types/index.ts +0 -38
- package/src/features/text-to-image/domain/types/text-to-image.types.ts +0 -58
- package/src/features/text-to-image/index.ts +0 -116
- package/src/features/text-to-image/infrastructure/index.ts +0 -1
- package/src/features/text-to-image/infrastructure/services/index.ts +0 -5
- package/src/features/text-to-image/infrastructure/services/text-to-image-executor.ts +0 -147
- package/src/features/text-to-image/presentation/components/index.ts +0 -30
- package/src/features/text-to-image/presentation/hooks/index.ts +0 -30
- package/src/features/text-to-image/presentation/hooks/useFormState.ts +0 -103
- package/src/features/text-to-image/presentation/hooks/useGeneration.ts +0 -139
- package/src/features/text-to-image/presentation/hooks/useTextToImageFeature.ts +0 -111
- package/src/features/text-to-image/presentation/hooks/useTextToImageForm.ts +0 -58
- package/src/features/text-to-image/presentation/index.ts +0 -7
- package/src/features/text-to-video/README.md +0 -412
- package/src/features/text-to-video/domain/index.ts +0 -1
- package/src/features/text-to-video/domain/types/callback.types.ts +0 -69
- package/src/features/text-to-video/domain/types/component.types.ts +0 -106
- package/src/features/text-to-video/domain/types/config.types.ts +0 -61
- package/src/features/text-to-video/domain/types/index.ts +0 -56
- package/src/features/text-to-video/domain/types/request.types.ts +0 -36
- package/src/features/text-to-video/domain/types/state.types.ts +0 -53
- package/src/features/text-to-video/index.ts +0 -68
- package/src/features/text-to-video/infrastructure/index.ts +0 -1
- package/src/features/text-to-video/infrastructure/services/index.ts +0 -5
- package/src/features/text-to-video/infrastructure/services/text-to-video-executor.ts +0 -141
- package/src/features/text-to-video/presentation/components/FrameSelector.tsx +0 -153
- package/src/features/text-to-video/presentation/components/GenerationTabs.tsx +0 -73
- package/src/features/text-to-video/presentation/components/HeroSection.tsx +0 -61
- package/src/features/text-to-video/presentation/components/HintCarousel.tsx +0 -96
- package/src/features/text-to-video/presentation/components/OptionsPanel.tsx +0 -121
- package/src/features/text-to-video/presentation/components/index.ts +0 -10
- package/src/features/text-to-video/presentation/hooks/index.ts +0 -17
- package/src/features/text-to-video/presentation/hooks/useTextToVideoFeature.ts +0 -225
- package/src/features/text-to-video/presentation/hooks/useTextToVideoForm.ts +0 -134
- package/src/features/text-to-video/presentation/index.ts +0 -7
- package/src/features/text-to-voice/README.md +0 -445
- package/src/features/text-to-voice/domain/index.ts +0 -1
- package/src/features/text-to-voice/domain/types/component.types.ts +0 -91
- package/src/features/text-to-voice/domain/types/config.types.ts +0 -34
- package/src/features/text-to-voice/domain/types/form.types.ts +0 -39
- package/src/features/text-to-voice/domain/types/generation.types.ts +0 -43
- package/src/features/text-to-voice/domain/types/index.ts +0 -38
- package/src/features/text-to-voice/index.ts +0 -53
- package/src/features/text-to-voice/infrastructure/index.ts +0 -1
- package/src/features/text-to-voice/infrastructure/services/index.ts +0 -4
- package/src/features/text-to-voice/infrastructure/services/text-to-voice-executor.ts +0 -103
- package/src/features/text-to-voice/presentation/components/TextToVoiceAudioPlayer.tsx +0 -81
- package/src/features/text-to-voice/presentation/components/index.ts +0 -7
- package/src/features/text-to-voice/presentation/hooks/index.ts +0 -6
- package/src/features/text-to-voice/presentation/hooks/useTextToVoiceForm.ts +0 -91
- package/src/features/text-to-voice/presentation/hooks/useTextToVoiceGeneration.ts +0 -116
- package/src/features/text-to-voice/presentation/index.ts +0 -2
- package/src/features/upscaling/README.md +0 -396
- package/src/features/upscaling/domain/index.ts +0 -1
- package/src/features/upscaling/domain/types/index.ts +0 -1
- package/src/features/upscaling/domain/types/upscale.types.ts +0 -23
- package/src/features/upscaling/index.ts +0 -20
- package/src/features/upscaling/presentation/components/ComparisonSlider.tsx +0 -200
- package/src/features/upscaling/presentation/components/UpscaleFeature.tsx +0 -89
- package/src/features/upscaling/presentation/components/UpscaleResultView.tsx +0 -98
- package/src/features/upscaling/presentation/components/index.ts +0 -6
- package/src/features/upscaling/presentation/hooks/index.ts +0 -1
- package/src/features/upscaling/presentation/hooks/useUpscaleFeature.ts +0 -28
- package/src/features/upscaling/presentation/index.ts +0 -2
- package/src/features/wizard/domain/types.ts +0 -154
- package/src/features/wizard/index.ts +0 -43
- package/src/features/wizard/presentation/components/AIFeatureWizard.tsx +0 -231
- package/src/features/wizard/presentation/components/AIGenerationWizard.tsx +0 -132
- package/src/features/wizard/presentation/hooks/useWizard.ts +0 -120
- package/src/features/wizard/presentation/store/useWizardStore.ts +0 -82
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Couple Future Wizard Types
|
|
3
|
-
* Configuration types for the couple future wizard component
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { StepType, FlowCallbacks, FlowUploadedImageData } from "../../../domain/entities/flow-config.types";
|
|
7
|
-
|
|
8
|
-
/** Scenario data structure */
|
|
9
|
-
export interface WizardScenarioData {
|
|
10
|
-
readonly id: string;
|
|
11
|
-
readonly title: string;
|
|
12
|
-
readonly description?: string;
|
|
13
|
-
readonly image?: string;
|
|
14
|
-
readonly aiPrompt?: string;
|
|
15
|
-
readonly category?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/** Visual style option */
|
|
19
|
-
export interface WizardVisualStyleOption {
|
|
20
|
-
readonly id: string;
|
|
21
|
-
readonly icon: string;
|
|
22
|
-
readonly labelKey: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Partner upload config */
|
|
26
|
-
export interface WizardPartnerConfig {
|
|
27
|
-
readonly titleKey: string;
|
|
28
|
-
readonly subtitleKey: string;
|
|
29
|
-
readonly showFaceDetection?: boolean;
|
|
30
|
-
readonly showNameInput?: boolean;
|
|
31
|
-
readonly showPhotoTips?: boolean;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Wizard step config */
|
|
35
|
-
export interface WizardStepConfig {
|
|
36
|
-
readonly id: string;
|
|
37
|
-
readonly type: StepType;
|
|
38
|
-
readonly enabled?: boolean;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** Wizard configuration */
|
|
42
|
-
export interface CoupleFutureWizardConfig {
|
|
43
|
-
readonly steps: readonly WizardStepConfig[];
|
|
44
|
-
readonly customScenarioId?: string;
|
|
45
|
-
readonly partnerA?: WizardPartnerConfig;
|
|
46
|
-
readonly partnerB?: WizardPartnerConfig;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Wizard translations */
|
|
50
|
-
export interface CoupleFutureWizardTranslations {
|
|
51
|
-
readonly generator: {
|
|
52
|
-
readonly title: string;
|
|
53
|
-
readonly waitMessage: string;
|
|
54
|
-
readonly hint?: string;
|
|
55
|
-
};
|
|
56
|
-
readonly partnerA: {
|
|
57
|
-
readonly title: string;
|
|
58
|
-
readonly subtitle: string;
|
|
59
|
-
readonly continue: string;
|
|
60
|
-
readonly tapToUpload: string;
|
|
61
|
-
readonly selectPhoto: string;
|
|
62
|
-
readonly change: string;
|
|
63
|
-
};
|
|
64
|
-
readonly partnerB: {
|
|
65
|
-
readonly title: string;
|
|
66
|
-
readonly subtitle: string;
|
|
67
|
-
readonly continue: string;
|
|
68
|
-
readonly tapToUpload: string;
|
|
69
|
-
readonly selectPhoto: string;
|
|
70
|
-
readonly change: string;
|
|
71
|
-
};
|
|
72
|
-
readonly scenarioPreview: {
|
|
73
|
-
readonly continue: string;
|
|
74
|
-
readonly back?: string;
|
|
75
|
-
};
|
|
76
|
-
readonly defaultNames: {
|
|
77
|
-
readonly partnerA: string;
|
|
78
|
-
readonly partnerB: string;
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** Wizard data providers */
|
|
83
|
-
export interface CoupleFutureWizardData {
|
|
84
|
-
readonly scenarios: readonly WizardScenarioData[];
|
|
85
|
-
readonly selectedScenario?: WizardScenarioData;
|
|
86
|
-
readonly visualStyles?: readonly WizardVisualStyleOption[];
|
|
87
|
-
readonly surprisePrompts?: readonly string[];
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Wizard callbacks */
|
|
91
|
-
export interface CoupleFutureWizardCallbacks extends FlowCallbacks {
|
|
92
|
-
readonly onScenarioSelect?: (scenario: WizardScenarioData) => void;
|
|
93
|
-
readonly onPartnerUpload?: (partnerId: "A" | "B", image: FlowUploadedImageData) => void;
|
|
94
|
-
readonly onBackToScenarioSelection?: () => void;
|
|
95
|
-
readonly requireFeature?: (callback: () => void) => boolean;
|
|
96
|
-
readonly onStepChange?: (stepId: string, stepType: StepType) => void;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Wizard props */
|
|
100
|
-
export interface CoupleFutureWizardProps {
|
|
101
|
-
readonly userId?: string;
|
|
102
|
-
readonly config: CoupleFutureWizardConfig;
|
|
103
|
-
readonly translations: CoupleFutureWizardTranslations;
|
|
104
|
-
readonly data: CoupleFutureWizardData;
|
|
105
|
-
readonly callbacks?: CoupleFutureWizardCallbacks;
|
|
106
|
-
readonly t: (key: string) => string;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** Wizard state (exposed to parent) */
|
|
110
|
-
export interface CoupleFutureWizardState {
|
|
111
|
-
readonly currentStepId: string;
|
|
112
|
-
readonly selectedScenario: WizardScenarioData | null;
|
|
113
|
-
readonly partnerA: FlowUploadedImageData | null;
|
|
114
|
-
readonly partnerB: FlowUploadedImageData | null;
|
|
115
|
-
readonly partnerAName: string;
|
|
116
|
-
readonly partnerBName: string;
|
|
117
|
-
readonly customPrompt: string;
|
|
118
|
-
readonly visualStyle: string;
|
|
119
|
-
readonly isGenerating: boolean;
|
|
120
|
-
readonly progress: number;
|
|
121
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Couple Future Feature
|
|
3
|
-
* Identity-preserving image generation for couples using Nano Banana
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export { executeCoupleFuture } from "./infrastructure/executor";
|
|
7
|
-
export type {
|
|
8
|
-
CoupleFutureInput,
|
|
9
|
-
CoupleFutureConfig,
|
|
10
|
-
CoupleFutureResult,
|
|
11
|
-
NanoBananaAspectRatio,
|
|
12
|
-
NanoBananaOutputFormat,
|
|
13
|
-
CoupleFeatureId,
|
|
14
|
-
CoupleFeatureSelection,
|
|
15
|
-
} from "./domain/types";
|
|
16
|
-
export { COUPLE_FUTURE_DEFAULTS } from "./domain/types";
|
|
17
|
-
export { useCoupleFutureFlow } from "./presentation/hooks/useCoupleFutureFlow";
|
|
18
|
-
export type {
|
|
19
|
-
CoupleFutureFlowConfig,
|
|
20
|
-
CoupleFutureFlowState,
|
|
21
|
-
CoupleFutureFlowActions,
|
|
22
|
-
CoupleFutureFlowProps,
|
|
23
|
-
} from "./presentation/hooks/useCoupleFutureFlow";
|
|
24
|
-
export {
|
|
25
|
-
RomanticMoodSelector,
|
|
26
|
-
ArtStyleSelector,
|
|
27
|
-
ArtistStyleSelector,
|
|
28
|
-
WardrobeSelector,
|
|
29
|
-
} from "./presentation/components";
|
|
30
|
-
export type {
|
|
31
|
-
RomanticMoodSelectorProps,
|
|
32
|
-
ArtStyleSelectorProps,
|
|
33
|
-
ArtistStyleSelectorProps,
|
|
34
|
-
WardrobeSelectorProps,
|
|
35
|
-
} from "./presentation/components";
|
|
36
|
-
export { CoupleFeatureScreen } from "./presentation/screens/CoupleFeatureScreen";
|
|
37
|
-
export type { CoupleFeatureScreenProps } from "./presentation/screens/CoupleFeatureScreen";
|
|
38
|
-
export {
|
|
39
|
-
COUPLE_FEATURE_CONFIGS,
|
|
40
|
-
ROMANTIC_MOOD_OPTIONS,
|
|
41
|
-
ART_STYLE_OPTIONS,
|
|
42
|
-
ARTIST_STYLE_OPTIONS,
|
|
43
|
-
} from "./infrastructure/coupleFeatureRegistry";
|
|
44
|
-
export type {
|
|
45
|
-
CoupleFeatureConfig,
|
|
46
|
-
CoupleFeatureOption,
|
|
47
|
-
} from "./infrastructure/coupleFeatureRegistry";
|
|
48
|
-
export { enhanceCouplePrompt } from "./infrastructure/couplePromptEnhancer";
|
|
49
|
-
|
|
50
|
-
// Wizard Component
|
|
51
|
-
export { CoupleFutureWizard, resetCoupleFutureWizard } from "./presentation/components/CoupleFutureWizard";
|
|
52
|
-
export { GeneratingStepContent } from "./presentation/components/GeneratingStepContent";
|
|
53
|
-
export type {
|
|
54
|
-
CoupleFutureWizardProps,
|
|
55
|
-
CoupleFutureWizardConfig,
|
|
56
|
-
CoupleFutureWizardTranslations,
|
|
57
|
-
CoupleFutureWizardData,
|
|
58
|
-
CoupleFutureWizardCallbacks,
|
|
59
|
-
CoupleFutureWizardState,
|
|
60
|
-
WizardScenarioData,
|
|
61
|
-
WizardVisualStyleOption,
|
|
62
|
-
WizardPartnerConfig,
|
|
63
|
-
WizardStepConfig,
|
|
64
|
-
} from "./domain/wizard.types";
|
|
65
|
-
|
|
66
|
-
// Generation utilities
|
|
67
|
-
export {
|
|
68
|
-
buildGenerationInputFromConfig,
|
|
69
|
-
processGenerationResultFromConfig,
|
|
70
|
-
buildCreationFromConfig,
|
|
71
|
-
DEFAULT_VISUAL_STYLES,
|
|
72
|
-
} from "./infrastructure/generationUtils";
|
|
73
|
-
export type {
|
|
74
|
-
ScenarioConfig,
|
|
75
|
-
VisualStyleConfig,
|
|
76
|
-
GenerationImage,
|
|
77
|
-
BuildGenerationInputConfig,
|
|
78
|
-
GenerationInputResult,
|
|
79
|
-
ProcessResultConfig,
|
|
80
|
-
GenerationResultData,
|
|
81
|
-
BuildCreationConfig,
|
|
82
|
-
CoupleFutureCreationData,
|
|
83
|
-
} from "./infrastructure/generationUtils";
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Couple Feature Registry
|
|
3
|
-
* Configuration for couple generation feature selectors
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export interface CoupleFeatureOption {
|
|
7
|
-
id: string;
|
|
8
|
-
iconKey: string;
|
|
9
|
-
labelKey: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface CoupleFeatureConfig {
|
|
13
|
-
id: string;
|
|
14
|
-
translationPrefix: string;
|
|
15
|
-
hasIntensitySlider: boolean;
|
|
16
|
-
selectionType: "single" | "multi";
|
|
17
|
-
options: CoupleFeatureOption[];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const ROMANTIC_MOOD_OPTIONS: CoupleFeatureOption[] = [
|
|
21
|
-
{ id: "romantic", iconKey: "heart", labelKey: "romantic" },
|
|
22
|
-
{ id: "mysterious", iconKey: "moon", labelKey: "mysterious" },
|
|
23
|
-
{ id: "magical", iconKey: "sparkles", labelKey: "magical" },
|
|
24
|
-
{ id: "energetic", iconKey: "flash-outline", labelKey: "energetic" },
|
|
25
|
-
{ id: "melancholic", iconKey: "cloud", labelKey: "melancholic" },
|
|
26
|
-
{ id: "passionate", iconKey: "flame", labelKey: "passionate" },
|
|
27
|
-
{ id: "nostalgic", iconKey: "camera", labelKey: "nostalgic" },
|
|
28
|
-
{ id: "futuristic", iconKey: "rocket", labelKey: "futuristic" },
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
export const ART_STYLE_OPTIONS: CoupleFeatureOption[] = [
|
|
32
|
-
{ id: "original", iconKey: "image", labelKey: "original" },
|
|
33
|
-
{ id: "cubism", iconKey: "shape", labelKey: "cubism" },
|
|
34
|
-
{ id: "popArt", iconKey: "color", labelKey: "popArt" },
|
|
35
|
-
{ id: "impressionism", iconKey: "brush", labelKey: "impressionism" },
|
|
36
|
-
{ id: "surrealism", iconKey: "eye", labelKey: "surrealism" },
|
|
37
|
-
{ id: "renaissance", iconKey: "palette", labelKey: "renaissance" },
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
export const ARTIST_STYLE_OPTIONS: CoupleFeatureOption[] = [
|
|
41
|
-
{ id: "vanGogh", iconKey: "brush", labelKey: "vanGogh" },
|
|
42
|
-
{ id: "picasso", iconKey: "shape", labelKey: "picasso" },
|
|
43
|
-
{ id: "fridaKahlo", iconKey: "flower", labelKey: "fridaKahlo" },
|
|
44
|
-
{ id: "daVinci", iconKey: "palette", labelKey: "daVinci" },
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
export const COUPLE_FEATURE_CONFIGS: Record<string, CoupleFeatureConfig> = {
|
|
48
|
-
"romantic-mood": {
|
|
49
|
-
id: "romantic-mood",
|
|
50
|
-
translationPrefix: "romanticPhoto",
|
|
51
|
-
hasIntensitySlider: true,
|
|
52
|
-
selectionType: "multi",
|
|
53
|
-
options: ROMANTIC_MOOD_OPTIONS,
|
|
54
|
-
},
|
|
55
|
-
"art-style": {
|
|
56
|
-
id: "art-style",
|
|
57
|
-
translationPrefix: "artStyles",
|
|
58
|
-
hasIntensitySlider: true,
|
|
59
|
-
selectionType: "single",
|
|
60
|
-
options: ART_STYLE_OPTIONS,
|
|
61
|
-
},
|
|
62
|
-
"artist-style": {
|
|
63
|
-
id: "artist-style",
|
|
64
|
-
translationPrefix: "artistStyles",
|
|
65
|
-
hasIntensitySlider: true,
|
|
66
|
-
selectionType: "single",
|
|
67
|
-
options: ARTIST_STYLE_OPTIONS,
|
|
68
|
-
},
|
|
69
|
-
wardrobe: {
|
|
70
|
-
id: "wardrobe",
|
|
71
|
-
translationPrefix: "wardrobe",
|
|
72
|
-
hasIntensitySlider: false,
|
|
73
|
-
selectionType: "single",
|
|
74
|
-
options: [],
|
|
75
|
-
},
|
|
76
|
-
};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Couple Prompt Enhancer
|
|
3
|
-
* Enhances base prompts with feature-specific selections
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { CoupleFeatureSelection } from "../domain/types";
|
|
7
|
-
|
|
8
|
-
const MOOD_DESCRIPTIONS: Record<string, string> = {
|
|
9
|
-
romantic: "warm romantic tones, soft candlelight, intimate atmosphere",
|
|
10
|
-
mysterious: "moody low-key lighting, deep shadows, enigmatic ambiance",
|
|
11
|
-
magical: "sparkly magical effects, ethereal glow, fairy-tale atmosphere",
|
|
12
|
-
energetic: "vibrant dynamic energy, bright lighting, lively atmosphere",
|
|
13
|
-
melancholic: "soft melancholic tones, gentle shadows, contemplative mood",
|
|
14
|
-
passionate: "intense passionate colors, dramatic lighting, emotional depth",
|
|
15
|
-
nostalgic: "vintage nostalgic feel, warm sepia tones, timeless quality",
|
|
16
|
-
futuristic: "modern futuristic aesthetic, neon accents, sci-fi atmosphere",
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const ART_STYLE_DESCRIPTIONS: Record<string, string> = {
|
|
20
|
-
cubism: "geometric cubist style with angular shapes and fragmented forms",
|
|
21
|
-
popArt: "bold pop art style with bright vibrant colors and graphic elements",
|
|
22
|
-
impressionism: "impressionist style with visible brushstrokes and light effects",
|
|
23
|
-
surrealism: "surrealist style with dreamlike imagery and unexpected juxtapositions",
|
|
24
|
-
renaissance: "classical renaissance style with rich details and balanced composition",
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const ARTIST_STYLE_DESCRIPTIONS: Record<string, string> = {
|
|
28
|
-
vanGogh: "Van Gogh's post-impressionist style with thick expressive brushstrokes and swirling patterns",
|
|
29
|
-
picasso: "Picasso's cubist style with geometric fragmentation and multiple perspectives",
|
|
30
|
-
fridaKahlo: "Frida Kahlo's vibrant symbolic style with rich colors and personal imagery",
|
|
31
|
-
daVinci: "Leonardo da Vinci's renaissance mastery with subtle sfumato and perfect proportion",
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const WARDROBE_STYLE_DESCRIPTIONS: Record<string, string> = {
|
|
35
|
-
casual: "casual comfortable outfit with relaxed fit",
|
|
36
|
-
formal: "elegant formal attire with sophisticated style",
|
|
37
|
-
sporty: "athletic sporty wear with dynamic energy",
|
|
38
|
-
elegant: "refined elegant clothing with graceful details",
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const getIntensityLabel = (intensity: number): string => {
|
|
42
|
-
if (intensity >= 75) return "strong";
|
|
43
|
-
if (intensity >= 50) return "moderate";
|
|
44
|
-
return "subtle";
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const getArtistIntensityLabel = (intensity: number): string => {
|
|
48
|
-
if (intensity >= 75) return "strong homage to";
|
|
49
|
-
if (intensity >= 50) return "inspired by";
|
|
50
|
-
return "subtle influence of";
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export const enhanceCouplePrompt = (
|
|
54
|
-
basePrompt: string,
|
|
55
|
-
selections: CoupleFeatureSelection
|
|
56
|
-
): string => {
|
|
57
|
-
let enhanced = basePrompt;
|
|
58
|
-
|
|
59
|
-
if (selections.romanticMoods && selections.romanticMoods.length > 0) {
|
|
60
|
-
const moodDescriptions = selections.romanticMoods
|
|
61
|
-
.map((mood) => MOOD_DESCRIPTIONS[mood])
|
|
62
|
-
.filter(Boolean)
|
|
63
|
-
.join(", ");
|
|
64
|
-
|
|
65
|
-
if (moodDescriptions) {
|
|
66
|
-
const intensity = selections.romanticIntensity || 70;
|
|
67
|
-
const label = getIntensityLabel(intensity);
|
|
68
|
-
enhanced += `. Apply ${label} ${moodDescriptions}`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (selections.artStyle && selections.artStyle !== "original") {
|
|
73
|
-
const styleDescription = ART_STYLE_DESCRIPTIONS[selections.artStyle];
|
|
74
|
-
if (styleDescription) {
|
|
75
|
-
const intensity = selections.artStyleIntensity || 80;
|
|
76
|
-
const label = getIntensityLabel(intensity);
|
|
77
|
-
enhanced += `. Render in ${label} applied ${styleDescription}`;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (selections.artist) {
|
|
82
|
-
const artistDescription = ARTIST_STYLE_DESCRIPTIONS[selections.artist];
|
|
83
|
-
if (artistDescription) {
|
|
84
|
-
const intensity = selections.artistIntensity || 70;
|
|
85
|
-
const label = getArtistIntensityLabel(intensity);
|
|
86
|
-
enhanced += `. Create in ${label} ${artistDescription}`;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (selections.wardrobeStyle) {
|
|
91
|
-
const wardrobeDescription = WARDROBE_STYLE_DESCRIPTIONS[selections.wardrobeStyle];
|
|
92
|
-
if (wardrobeDescription) {
|
|
93
|
-
const intensity = selections.wardrobeIntensity || 70;
|
|
94
|
-
const label = getIntensityLabel(intensity);
|
|
95
|
-
enhanced += `. Dress them in ${label} ${wardrobeDescription}`;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return enhanced;
|
|
100
|
-
};
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Couple Future Executor
|
|
3
|
-
* Multi-reference image generation using Nano Banana
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { providerRegistry } from "../../../infrastructure/services/provider-registry.service";
|
|
7
|
-
import type { CoupleFutureInput, CoupleFutureConfig, CoupleFutureResult } from "../domain/types";
|
|
8
|
-
import { COUPLE_FUTURE_DEFAULTS } from "../domain/types";
|
|
9
|
-
|
|
10
|
-
declare const __DEV__: boolean;
|
|
11
|
-
|
|
12
|
-
const formatBase64 = (base64: string): string => {
|
|
13
|
-
if (!base64) return "";
|
|
14
|
-
return base64.startsWith("data:") ? base64 : `data:image/jpeg;base64,${base64}`;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export async function executeCoupleFuture(
|
|
18
|
-
input: CoupleFutureInput,
|
|
19
|
-
config: CoupleFutureConfig,
|
|
20
|
-
): Promise<CoupleFutureResult> {
|
|
21
|
-
if (!config || !config.model) {
|
|
22
|
-
return {
|
|
23
|
-
success: false,
|
|
24
|
-
error: "Model is required. Please provide model from app's generation config.",
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
29
|
-
console.log("[Executor] ========== COUPLE FUTURE START ==========");
|
|
30
|
-
console.log("[Executor] Input received:", {
|
|
31
|
-
hasPartnerA: !!input.partnerABase64,
|
|
32
|
-
partnerALength: input.partnerABase64?.length || 0,
|
|
33
|
-
hasPartnerB: !!input.partnerBBase64,
|
|
34
|
-
partnerBLength: input.partnerBBase64?.length || 0,
|
|
35
|
-
promptLength: input.prompt?.length || 0,
|
|
36
|
-
prompt: input.prompt?.slice(0, 300),
|
|
37
|
-
});
|
|
38
|
-
console.log("[Executor] Config:", {
|
|
39
|
-
model: config.model,
|
|
40
|
-
hasOnProgress: !!config?.onProgress,
|
|
41
|
-
timeoutMs: config?.timeoutMs,
|
|
42
|
-
aspectRatio: config?.aspectRatio,
|
|
43
|
-
outputFormat: config?.outputFormat,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const provider = providerRegistry.getActiveProvider();
|
|
48
|
-
|
|
49
|
-
if (!provider) {
|
|
50
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
51
|
-
console.log("[Executor] ❌ No AI provider configured");
|
|
52
|
-
}
|
|
53
|
-
return { success: false, error: "No AI provider configured" };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
57
|
-
console.log("[Executor] ✅ Provider found:", provider.constructor.name);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (!provider.isInitialized()) {
|
|
61
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
62
|
-
console.log("[Executor] ❌ AI provider not initialized");
|
|
63
|
-
}
|
|
64
|
-
return { success: false, error: "AI provider not initialized" };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
68
|
-
console.log("[Executor] ✅ Provider initialized");
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const { onProgress, timeoutMs, aspectRatio, outputFormat } = config ?? {};
|
|
72
|
-
let lastStatus = "";
|
|
73
|
-
|
|
74
|
-
try {
|
|
75
|
-
onProgress?.(5);
|
|
76
|
-
|
|
77
|
-
const imageUrls = [input.partnerABase64, input.partnerBBase64]
|
|
78
|
-
.filter(Boolean)
|
|
79
|
-
.map(formatBase64);
|
|
80
|
-
|
|
81
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
82
|
-
console.log("[Executor] 🖼️ Image URLs prepared:", {
|
|
83
|
-
count: imageUrls.length,
|
|
84
|
-
url1Length: imageUrls[0]?.length || 0,
|
|
85
|
-
url2Length: imageUrls[1]?.length || 0,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (imageUrls.length < 2) {
|
|
90
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
91
|
-
console.log("[Executor] ❌ Two reference images required, got:", imageUrls.length);
|
|
92
|
-
}
|
|
93
|
-
return { success: false, error: "Two reference images required" };
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
onProgress?.(10);
|
|
97
|
-
|
|
98
|
-
const enhancedPrompt = `A photorealistic image of a couple. The first person @image1 and the second person @image2. ${input.prompt}. High quality, detailed, professional photography.`;
|
|
99
|
-
|
|
100
|
-
const modelInput = {
|
|
101
|
-
image_urls: imageUrls,
|
|
102
|
-
prompt: enhancedPrompt,
|
|
103
|
-
aspect_ratio: aspectRatio ?? COUPLE_FUTURE_DEFAULTS.aspectRatio,
|
|
104
|
-
output_format: outputFormat ?? COUPLE_FUTURE_DEFAULTS.outputFormat,
|
|
105
|
-
num_images: 1,
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
109
|
-
console.log("[Executor] 📤 FAL AI Request:");
|
|
110
|
-
console.log("[Executor] Model:", config.model);
|
|
111
|
-
console.log("[Executor] Prompt:", enhancedPrompt.slice(0, 400));
|
|
112
|
-
console.log("[Executor] Aspect ratio:", modelInput.aspect_ratio);
|
|
113
|
-
console.log("[Executor] Output format:", modelInput.output_format);
|
|
114
|
-
console.log("[Executor] Timeout:", timeoutMs ?? COUPLE_FUTURE_DEFAULTS.timeoutMs);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
118
|
-
console.log("[Executor] 📡 Calling provider.subscribe()...");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const result = await provider.subscribe(config.model, modelInput, {
|
|
122
|
-
timeoutMs: timeoutMs ?? COUPLE_FUTURE_DEFAULTS.timeoutMs,
|
|
123
|
-
onQueueUpdate: (status) => {
|
|
124
|
-
if (status.status === lastStatus) return;
|
|
125
|
-
lastStatus = status.status;
|
|
126
|
-
|
|
127
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
128
|
-
console.log("[Executor] 📊 Queue status update:", {
|
|
129
|
-
status: status.status,
|
|
130
|
-
logs: status.logs?.slice(-3),
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (status.status === "IN_QUEUE") onProgress?.(20);
|
|
135
|
-
else if (status.status === "IN_PROGRESS") onProgress?.(50);
|
|
136
|
-
},
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
onProgress?.(90);
|
|
140
|
-
|
|
141
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
142
|
-
console.log("[Executor] 📥 FAL AI Response received");
|
|
143
|
-
console.log("[Executor] Raw result type:", typeof result);
|
|
144
|
-
console.log("[Executor] Raw result keys:", result ? Object.keys(result as object) : "null");
|
|
145
|
-
console.log("[Executor] Raw result:", JSON.stringify(result, null, 2).slice(0, 1000));
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const rawResult = result as Record<string, unknown>;
|
|
149
|
-
const data = (rawResult?.data ?? rawResult) as { images?: Array<{ url: string }> };
|
|
150
|
-
const imageUrl = data?.images?.[0]?.url;
|
|
151
|
-
|
|
152
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
153
|
-
console.log("[Executor] 🔍 Parsed response:");
|
|
154
|
-
console.log("[Executor] Has data:", !!data);
|
|
155
|
-
console.log("[Executor] Images array length:", data?.images?.length || 0);
|
|
156
|
-
console.log("[Executor] First image URL:", imageUrl?.slice(0, 100));
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
onProgress?.(100);
|
|
160
|
-
|
|
161
|
-
if (!imageUrl) {
|
|
162
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
163
|
-
console.log("[Executor] ❌ No image URL in response");
|
|
164
|
-
console.log("[Executor] ========== COUPLE FUTURE END (FAILED) ==========");
|
|
165
|
-
}
|
|
166
|
-
return { success: false, error: "No image generated" };
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
170
|
-
console.log("[Executor] ✅ Generation successful!");
|
|
171
|
-
console.log("[Executor] Image URL:", imageUrl.slice(0, 100));
|
|
172
|
-
console.log("[Executor] ========== COUPLE FUTURE END (SUCCESS) ==========");
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return { success: true, imageUrl };
|
|
176
|
-
} catch (error) {
|
|
177
|
-
const message = error instanceof Error ? error.message : "Generation failed";
|
|
178
|
-
if (typeof __DEV__ !== "undefined" && __DEV__) {
|
|
179
|
-
console.error("[Executor] ❌ Exception caught:", {
|
|
180
|
-
message,
|
|
181
|
-
name: error instanceof Error ? error.name : "Unknown",
|
|
182
|
-
stack: error instanceof Error ? error.stack?.slice(0, 500) : undefined,
|
|
183
|
-
});
|
|
184
|
-
console.log("[Executor] ========== COUPLE FUTURE END (ERROR) ==========");
|
|
185
|
-
}
|
|
186
|
-
return { success: false, error: message };
|
|
187
|
-
}
|
|
188
|
-
}
|