diff --git a/src/components/parameter-schema/form-mode/ParameterFileInput.vue b/src/components/parameter-schema/form-mode/ParameterFileInput.vue
index 6ca9c8b9e23533d70daa450951cc98c77422e1d5..260ff12d0926ade0a1e43c7c802b8319522a2b0e 100644
--- a/src/components/parameter-schema/form-mode/ParameterFileInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterFileInput.vue
@@ -1,10 +1,11 @@
 <script setup lang="ts">
-import { computed, type PropType, reactive, watch } from "vue";
+import { computed, onMounted, type PropType, reactive, watch } from "vue";
 import { useS3ObjectStore } from "@/stores/s3objects";
 import { useBucketStore } from "@/stores/buckets";
 import type { SizeModifierType } from "@/types/PropTypes";
 
 const model = defineModel<string | undefined>({ required: true });
+const s3Regex = /s3:\/\/(\S*)\/(\S*)/g;
 
 const props = defineProps({
   parameter: {
@@ -50,6 +51,33 @@ const inputDynamicClass = computed<string[]>(() => {
   return cssClasses;
 });
 
+watch(model, (newVal, oldVal) => {
+  if (
+    newVal != oldVal &&
+    newVal !== translateToModel(s3Path.bucket, s3Path.key)
+  ) {
+    parseModel(newVal);
+  }
+});
+
+function parseModel(val?: string) {
+  if (val == undefined) {
+    s3Path.bucket = "";
+    s3Path.key = undefined;
+    return;
+  }
+  const match = s3Regex.exec(val ?? "");
+  if (match) {
+    s3Path.bucket = match[1];
+    s3Path.key = match[2];
+    if (bucketRepository.bucketMapping[s3Path.bucket] == undefined) {
+      console.log("Missing bucket");
+    }
+  } else {
+    console.log("Not S3 Path");
+  }
+}
+
 const s3Path = reactive<{
   bucket: string;
   key?: string;
@@ -104,23 +132,27 @@ watch(
   () => s3Path.key,
   (newVal, oldVal) => {
     if (newVal !== oldVal) {
-      updateModel(s3Path.bucket, newVal);
+      model.value = translateToModel(s3Path.bucket, newVal);
     }
   },
 );
 
 function updateBucket(bucket: string) {
   s3Path.bucket = bucket;
-  updateModel(bucket, s3Path.key);
+  model.value = translateToModel(bucket, s3Path.key);
   s3ObjectRepository.fetchS3Objects(
     bucket,
     bucketRepository.ownPermissions[bucket]?.file_prefix ?? undefined,
   );
 }
 
-function updateModel(bucket: string, key?: string) {
-  model.value = !bucket ? undefined : `s3://${bucket}${key ? "/" + key : ""}`;
+function translateToModel(bucket: string, key?: string): string | undefined {
+  return !bucket ? undefined : `s3://${bucket}${key ? "/" + key : ""}`;
 }
+
+onMounted(() => {
+  parseModel(model.value);
+});
 </script>
 
 <template>
diff --git a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
index dc75ea44f2a1d6937b4167ca4ed50b781010aec2..aba2788b3920d70e2b92da8e4b7a64c92332c209 100644
--- a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
+++ b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue
@@ -107,6 +107,7 @@ function parameterId(parameterName: string): string {
               v-model="model[parameterName]"
               :required="parameterRequired(parameterGroup, parameterName)"
               border
+              :resource-parameter="resourceParameters?.includes(parameterName)"
             />
             <span
               class="input-group-text cursor-pointer px-2 border border-secondary"
diff --git a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
index 4dfeaae237d9357d495e3db62a253142379efe68..8e4a5ca288bc179d93f8f321632b0c65c0b55064 100644
--- a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
@@ -1,19 +1,20 @@
 <script setup lang="ts">
 import type { ResourcePath_Input } from "@/client/workflow";
 import { Status } from "@/client/resource";
-import { computed, reactive, watch } from "vue";
+import { computed, onMounted, reactive, watch } from "vue";
 import { useResourceStore } from "@/stores/resources";
 import type { SizeModifierType } from "@/types/PropTypes";
 
-const model = defineModel<string | ResourcePath_Input>({
+const model = defineModel<string | ResourcePath_Input | undefined>({
   required: true,
 });
 
+const resourceRegex = /CLDB-([\da-f]{32})\/(latest|[\da-f]{32})([/\S]*)/g;
+
 const props = defineProps<{
   // eslint-disable-next-line @typescript-eslint/no-explicit-any
   parameter: Record<string, any>;
   required?: boolean;
-  helpId?: string;
   rawModel?: boolean;
   sizeModifier?: SizeModifierType;
   border?: boolean;
@@ -50,32 +51,74 @@ const inputDynamicClass = computed<string[]>(() => {
 function updateResourceId(rid: string) {
   resource.resource_id = rid;
   resource.resource_version_id = "";
-  updateModel();
+  model.value = translateToModel();
 }
 
 function updateResourceVersionId(rvid: string) {
   resource.resource_version_id = rvid;
-  updateModel();
+  model.value = translateToModel();
   resourceRepository.fetchResourceTree(resource.resource_id, rvid);
 }
 
+watch(model, (newVal, oldVal) => {
+  if (newVal != oldVal && newVal !== translateToModel()) {
+    parseModel(newVal);
+  }
+});
+
+function parseModel(val?: string | ResourcePath_Input) {
+  if (val == undefined) {
+    Object.assign(resource, {
+      resource_id: "",
+      resource_version_id: "",
+      suffix: undefined,
+    });
+  } else if (typeof val === "string") {
+    const match = resourceRegex.exec(val);
+    if (match) {
+      resource.resource_id = hexToUUID(match[1]);
+      resource.suffix = match[3];
+      resource.resource_version_id =
+        match[2].length === 32
+          ? hexToUUID(match[2])
+          : resourceRepository.getLatestVersion(resource.resource_id);
+      if (
+        resourceRepository.resourceMapping[resource.resource_id] == undefined ||
+        resourceRepository.versionMapping[resource.resource_version_id] ==
+          undefined
+      ) {
+        console.log("Missing resource");
+      }
+    } else {
+      console.log("Not resource Path");
+    }
+  } else {
+    Object.assign(resource, JSON.parse(JSON.stringify(val)));
+  }
+}
+
+function hexToUUID(hex?: string): string {
+  if (hex) {
+    return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
+  }
+  return "";
+}
+
 watch(
   () => resource.suffix,
   (newVal, oldVal) => {
     if (newVal !== oldVal) {
-      updateModel();
+      model.value = translateToModel();
     }
   },
 );
 
-function updateModel() {
+function translateToModel(): string | ResourcePath_Input {
   if (props.rawModel) {
-    model.value = resource;
-    return;
+    return resource;
   }
   if (resource.resource_version_id.length === 0) {
-    model.value = "";
-    return;
+    return "";
   }
   let val =
     resourceRepository.versionMapping[resource.resource_version_id]
@@ -83,8 +126,12 @@ function updateModel() {
   if (resource.suffix != undefined && val.length > 0) {
     val = val + resource.suffix;
   }
-  model.value = val;
+  return val;
 }
+
+onMounted(() => {
+  parseModel(model.value);
+});
 </script>
 
 <template>
diff --git a/src/stores/resources.ts b/src/stores/resources.ts
index 31cbaf40311e61851a07d07d677bc9ab16a244f6..61fb1e9f27fb68fc05f87587b2736712fe3a58cc 100644
--- a/src/stores/resources.ts
+++ b/src/stores/resources.ts
@@ -65,6 +65,17 @@ export const useResourceStore = defineStore({
       }
       return mapping;
     },
+    getLatestVersion(): (resource_id: string) => string {
+      return (resource_id) => {
+        for (const version of this.resourceMapping[resource_id]?.versions ??
+          []) {
+          if (version.status === Status.LATEST) {
+            return version.resource_version_id;
+          }
+        }
+        return "";
+      };
+    },
     ownResources(): ResourceOut[] {
       return Object.values(this.ownResourceMapping);
     },